Thursday, December 3, 2015

ဒီ source ေလးကလည္း root လုပ္တဲ့ေနရာမွာသံုးတဲ့ psneuter ရဲ႕ C language Source ပါ

xxxxxxxxxxxxx
// psneuter.c, written by scotty2.
// neuter the android property service.
// ashmem allows us to restrict permissions for a page further, but not relax them.
// adb relies on the ability to read ro.secure to know whether to drop its privileges or not;
// if it can't read the ro.secure property (because perhaps it couldn't map the ashmem page... smile emoticon
// then it will come up as root under the assumption that ro.secure is off.
// this will have the unfortunate side effect of rendering any of the bionic userspace that relies on the property
// service and things like dns broken.
// thus, we will want to use this, see if we can fix the misc partition, and downgrade the firmware as a whole to something more root friendly.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <linux/ioctl.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <stdint.h>
#define ASHMEM_NAME_LEN 256
#define __ASHMEMIOC 0x77
#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN])
#define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN])
#define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t)
#define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4)
#define ASHMEM_SET_PROT_MASK _IOW(__ASHMEMIOC, 5, unsigned long)
#define ASHMEM_GET_PROT_MASK _IO(__ASHMEMIOC, 6)
#define ASHMEM_PIN _IOW(__ASHMEMIOC, 7, struct ashmem_pin)
#define ASHMEM_UNPIN _IOW(__ASHMEMIOC, 8, struct ashmem_pin)
#define ASHMEM_GET_PIN_STATUS _IO(__ASHMEMIOC, 9)
#define ASHMEM_PURGE_ALL_CACHES _IO(__ASHMEMIOC, 10)
int main(int argc, char **argv, char **envp)
{
char *workspace;
char *fdStr;
char *szStr;
char *ppage;
int fd;
long sz;
DIR *dir;
struct dirent *dent;
char cmdlinefile[PATH_MAX];
char cmdline[PATH_MAX];
pid_t adbdpid = 0;
setvbuf(stdout, 0, _IONBF, 0);
setvbuf(stderr, 0, _IONBF, 0);
workspace = getenv("ANDROID_PROPERTY_WORKSPACE");
if(!workspace)
{
fprintf(stderr, "Couldn't get workspace.\n");
exit(1);
}
fdStr = workspace;
if(strstr(workspace, ","))
*(strstr(workspace, ",")) = 0;
else
{
fprintf(stderr, "Incorrect format of ANDROID_PROPERTY_WORKSPACE environment variable?\n");
exit(1);
}
szStr = fdStr + strlen(fdStr) + 1;
fd = atoi(fdStr);
sz = atol(szStr);
if((ppage = mmap(0, sz, PROT_READ, MAP_SHARED, fd, 0)) == MAP_FAILED)
{
fprintf(stderr, "mmap() failed. %s\n", strerror(errno));
exit(1);
}
if(ioctl(fd, ASHMEM_SET_PROT_MASK, 0))
{
fprintf(stderr, "Failed to set prot mask (%s)\n", strerror(errno));
exit(1);
}
printf("property service neutered.\n");
printf("killing adbd. (should restart in a second or two)\n");
// now kill adbd.
dir = opendir("/proc");
if(!dir)
{
fprintf(stderr, "Failed to open /proc? kill adbd manually... somehow\n");
exit(1);
}
while((dent = readdir(dir)))
{
if(strspn(dent->d_name, "0123456789") == strlen(dent->d_name))
{
// pid dir
strcpy(cmdlinefile, "/proc/");
strcat(cmdlinefile, dent->d_name);
strcat(cmdlinefile, "/cmdline");
if((fd = open(cmdlinefile, O_RDONLY)) < 0)
{
fprintf(stderr, "Failed to open cmdline for pid %s\n", dent->d_name);
continue;
}
if(read(fd, cmdline, PATH_MAX) < 0)
{
fprintf(stderr, "Failed to read cmdline for pid %s\n", dent->d_name);
close(fd);
continue;
}
close(fd);
// printf("cmdline: %s\n", cmdline);
if(!strcmp(cmdline, "/sbin/adbd"))
{
// we got it.
adbdpid = atoi(dent->d_name);
break;
}
}
}
if(!adbdpid)
{
fprintf(stderr, "Failed to find adbd pid :(\n");
exit(1);
}
if(kill(adbdpid, SIGTERM))
{
fprintf(stderr, "Failed to kill adbd (%s)\n", strerror(errno));
exit(1);
}
return 0;
}

"Android ROM Developer Beginner တစ္ေယာက္အေနျဖင့္ နားလည္မႈ႕၊ အေခၚအေ၀ၚမလြဲသင့္ေသာ အေၾကာင္းအရာမ်ား"

OS နဲ႕ Firmware ခြဲျခားႏိုင္ရပါမယ္။ Kernel နဲ႕ OS ခြဲျခားနားလည္ရပါ့မယ္။
OS ဆိုတာ အလြယ္ေခၚရရင္ Operating System တစ္ခုပါ။ ဘယ္မွာရွိသလဲဆိုရင္ /System ပါဘဲ။
Firmware ဆိုတာကေတာ့ စက္တစ္လံုးရဲ႕ Hardware Spec; ေတြစုစည္းၿပီး လိုအပ္တဲ့ hardware Support ေတြ (ဥပမာ - voltage ေတြက အစ ထိန္းခ်ဳပ္အလုပ္လုပ္ေစၿပီး RAM ေတြ CPU ေတြကိုပါ Control လုပ္တယ္) ထိန္းခ်ဳပ္အလုပ္လုပ္ေစတဲ့အပိုင္းပါ။ Firmware မွာကိုက ႏွစ္မ်ဳိးရွိတယ္။ OS ကေန ထိန္းတဲ့ Firmware နဲ႕ hardware ကေနထိန္းတဲ့ Firmware ပါ။ OS ကေန ထိန္းလို႔ရတဲ့ firmware ကေတာ့ kernel ထဲမွာပါ၀င္ပါတယ္။ Hardware ကေနထိန္းတဲ့ firmware ကေတာ့ CPU IC ထဲမွာထည့္သြင္းထားပါတယ္။ အလြယ္ျမင္ႏိုင္ဖု႔ိေျပာရရင္ ကြန္ပ်ဴတာမွာဆို BIOS က hardware ထဲမွာ ထည့္သြင္းထားတဲ့ firmware ပါ။
ေနာက္တစ္က Kernel ပါ။ Kernel ဆိုတာကေတာ့ အလြယ္ဥပမာႏိႈင္းရရင္ ၾကက္ဥအႏွစ္လိုေပါ့ဗ်ာ။ သူမရွိဘဲ ဘယ္လို OS မွ အလုပ္မလုပ္ပါဘူး... hardware နဲ႕ OS ကို ခ်ိတ္ဆက္ေပးတဲ့အျပင္ OS အတြက္လိုအပ္တဲ့အေရးႀကီးအခ်က္အလက္ေတြကို မထိခိုက္ေအာင္ ကာကြယ္ေပးထားတယ္။
ဒါဆို Android version ျမင့္မယ္ဆိုရင္ အထက္ပါေတြ အကုန္ျမွင့္လို္က္ဖို႔ လိုသလားဆိုတာ ေမးစရာျဖစ္လာတယ္။ ဒီအေျဖအတြက္ေတာ့ Developer ရဲ႕ Develop လုပ္တဲ့အေပၚမူတည္ပါတယ္။ ေသခ်ာတာတစ္ခုကေတာ့ Firmware ေတြကို ေျပာင္းဖို႔လံုး၀ မလိုအပ္ပါဘူး တစ္ခ်ဳိ႕ေတြက Kernel ကိုပါ ေျပာင္းလဲၿပီး develop လုပ္ၾကသလို တစ္ခ်ဳိ႕က်ေတာ့လည္း OS ခ်ည္းဘဲ update လုပ္တဲ့ development ေတြရွိပါတယ္။ ယေန႔ android hardware ေလာကမွာ လိုက္လို႔မႏိုင္ေလာင္ေအာင္ကို မ်ားျပားလြန္းတဲ့ Device ေတြေပၚထြက္လာတာေၾကာင့္ Device တုိင္းနဲ႕ကိုက္ညီမဲ့ Android version ေတြ Develop လုပ္ဖို႔အတြက္က မျဖစ္ႏိုင္ေတာ့တာေၾကာင့္ General အေနနဲ႕သံုးလို႔ရမယ့္ kernel ေတြအျဖစ္ ျပဳျပင္ Develop လုပ္ၾကပါတယ္။ ဒီေတာ့ ဘာေတြျဖစ္လာသလဲဆုိေတာ့ မိမိစက္နဲ႕ မကိုက္ညီေတာ့တဲ့အခါမွာ wifi ေတြမရတာ bluetooth ေတြ ေပ်ာက္ေနတာကအစ network ေတြ ရွာမေတြတာတို႔ကေန စက္တစ္လံုးလံုး ေသသလိုျဖစ္သြားသည္အထိျဖစ္ႏိုင္ပါတယ္။
ျဖစ္ႏိုင္မယ္ဆိုရင္ေတာ့ မိမိ kernel နဲ႕ တူညီတဲ့ ROM ကိုရွာၿပီး update လုပ္တာ အေကာင္းဆံုးနဲ႕ error အနည္းဆံုးျဖစ္ပါလိမ့္မယ္။
ေနာက္အပိုင္းေတြမွာ ယေန႔လြဲမွားေခၚေ၀ၚေနတာေတြကို က်ေနာ္တို႔ Develop လုပ္မယ့္သူေတြအေနနဲ႕ မမွားရေအာင္ ဆက္လက္တင္ျပသြားပါ့မယ္။
၀င္ေရာက္ေလ့လာဖတ္ရႈတဲ့အတြက္ ေက်းဇူးအထူးတင္ရွိပါေၾကာင္း

android 2.3 series ေတြကို root လုပ္တဲ့အခါမွာ သံုးေလ့ရွိတဲ့ exploit ဖိုင္တစ္ခုျဖစ္တဲ့ psneuter ရဲ႕ source code

android 2.3 series ေတြကို root လုပ္တဲ့အခါမွာ သံုးေလ့ရွိတဲ့ exploit ဖိုင္တစ္ခုျဖစ္တဲ့ psneuter ရဲ႕ source code ပါ... ဒီ source ကိုေလ့လာၾကည့္ရင္ manual root ကို ဘယ္လို လုပ္လို႔ရမယ္ဆိုတာ သိသြားပါလိမ့္မယ္... 2.3 ေတြအတြက္ဘဲဆိုေပမဲ့ သေဘာတရားျခင္းတူတဲ့အတြက္ေၾကာင့္မို႔... တစ္ခ်ဳိ႕ေသာ partition ေတြကို ျပင္ဆင္လိုက္တာနဲ႕ က်န္တဲ့ version ေတြကို ရသြားပါလိမ့္မယ္... တစ္ခုေတာ့ရွိတယ္... android kernel ရဲ႕ ဖြဲ႕စည္းပံုကိုေတာ့ မျဖစ္မေနသိထားဖို႔လိုပါတယ္... Google မွာ ရွာရင္ေတာ့ ရႏိုင္ပါတယ္... သို႔ေပမဲ့ အေတာ္ေလးစိတ္ရွည္မွျဖစ္လိမ့္မယ္... ဘာလို႔လည္းဆိုေတာ့... ကိုုယ္ရွာတာနဲ႕ မဆိုင္တာေတြ အမ်ားႀကီးေတြ႕တတ္တယ္... ေနာက္ၿပီး ေတြ႔ေတာ့လည္း ဘာမွန္းမသိတာေတြျဖစ္တတ္တယ္... code ေတြကို ေလ့လာၾကည့္ၾကပါ...
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <linux/ioctl.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <stdint.h>
#define ASHMEM_NAME_LEN 256
#define __ASHMEMIOC 0x77
#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN])
#define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN])
#define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t)
#define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4)
#define ASHMEM_SET_PROT_MASK _IOW(__ASHMEMIOC, 5, unsigned long)
#define ASHMEM_GET_PROT_MASK _IO(__ASHMEMIOC, 6)
#define ASHMEM_PIN _IOW(__ASHMEMIOC, 7, struct ashmem_pin)
#define ASHMEM_UNPIN _IOW(__ASHMEMIOC, 8, struct ashmem_pin)
#define ASHMEM_GET_PIN_STATUS _IO(__ASHMEMIOC, 9)
#define ASHMEM_PURGE_ALL_CACHES _IO(__ASHMEMIOC, 10)
int main(int argc, char **argv, char **envp)
{
char *workspace;
char *fdStr;
char *szStr;
char *ppage;
int fd;
long sz;
DIR *dir;
struct dirent *dent;
char cmdlinefile[PATH_MAX];
char cmdline[PATH_MAX];
pid_t adbdpid = 0;
setvbuf(stdout, 0, _IONBF, 0);
setvbuf(stderr, 0, _IONBF, 0);
workspace = getenv("ANDROID_PROPERTY_WORKSPACE");
if(!workspace)
{
fprintf(stderr, "Couldn't get workspace.\n");
exit(1);
}
fdStr = workspace;
if(strstr(workspace, ","))
*(strstr(workspace, ",")) = 0;
else
{
fprintf(stderr, "Incorrect format of ANDROID_PROPERTY_WORKSPACE environment variable?\n");
exit(1);
}
szStr = fdStr + strlen(fdStr) + 1;
fd = atoi(fdStr);
sz = atol(szStr);
if((ppage = mmap(0, sz, PROT_READ, MAP_SHARED, fd, 0)) == MAP_FAILED)
{
fprintf(stderr, "mmap() failed. %s\n", strerror(errno));
exit(1);
}
if(ioctl(fd, ASHMEM_SET_PROT_MASK, 0))
{
fprintf(stderr, "Failed to set prot mask (%s)\n", strerror(errno));
exit(1);
}
printf("property service neutered.\n");
printf("killing adbd. (should restart in a second or two)\n");
// now kill adbd.
dir = opendir("/proc");
if(!dir)
{
fprintf(stderr, "Failed to open /proc? kill adbd manually... somehow\n");
exit(1);
}
while((dent = readdir(dir)))
{
if(strspn(dent->d_name, "0123456789") == strlen(dent->d_name))
{
// pid dir
strcpy(cmdlinefile, "/proc/");
strcat(cmdlinefile, dent->d_name);
strcat(cmdlinefile, "/cmdline");
if((fd = open(cmdlinefile, O_RDONLY)) < 0)
{
fprintf(stderr, "Failed to open cmdline for pid %s\n", dent->d_name);
continue;
}
if(read(fd, cmdline, PATH_MAX) < 0)
{
fprintf(stderr, "Failed to read cmdline for pid %s\n", dent->d_name);
close(fd);
continue;
}
close(fd);
// printf("cmdline: %s\n", cmdline);
if(!strcmp(cmdline, "/sbin/adbd"))
{
// we got it.
adbdpid = atoi(dent->d_name);
break;
}
}
}
if(!adbdpid)
{
fprintf(stderr, "Failed to find adbd pid :(\n");
exit(1);
}
if(kill(adbdpid, SIGTERM))
{
fprintf(stderr, "Failed to kill adbd (%s)\n", strerror(errno));
exit(1);
}
return 0;
}

China Tablet အေတာ္မ်ားမ်ား boot logo မွာတင္ လည္ေနတဲ့ ျပႆနာ ႀကံဳေနရင္

China Tablet အေတာ္မ်ားမ်ား boot logo မွာတင္ လည္ေနတဲ့ ျပႆနာ ႀကံဳေနရတယ္... ဟုတ္တယ္ဟုတ္ အဲဒါ ဘာေၾကာင့္လည္းဆိုတာ က်ေနာ္ ေတြ႔ရွိသေလာက္ ေျပာျပမယ္ေနာ္...
(၁) Tablet ေတြသံုးထားတဲ့ CPU ေတြက Allwinner လို႕ေခၚတဲ့ MPU အမ်ဳိးအစားတစ္ခုပါ.. A10 ရယ္ A13 ရယ္ အမ်ားဆံုးသံုးတဲ့ အမ်ဳိးအစားေတြ... ျမန္မာျပည္ကို ၀င္တာမ်ားတယ္... အဲဒီ့ CPU က ဘာျဖစ္လည္းဆိုေတာ့ သူ႕မွာ cache management မေကာင္းဘူး... ေျပာရရင္ Memory Management Process က စြမ္းေဆာင္ရည္သိပ္မေကာင္းဘူးလုိ႕ဆိုရမယ္... ဒဲ့ေျပာရရင္ သာမာန္ MP4 ေတြမွာသံုးတဲ့ sunplus chip အဆင့္ဘဲရွိတယ္... ဒါေပမဲ့ core ႏွစ္ခုပါတဲ့အတြက္ အလုပ္လုပ္ပုံ သြက္တယ္... cache မႏိုင္တာကလြဲလို႕ က်န္တဲ့အပိုင္းေတြမွာ အဆင္ေျပတယ္... ဒါက chipset ပိုင္း
(၂) RAM အျဖစ္သံုးထားတာကိုၾကည့္မယ္ဆိုရင္လည္း quality ram မဟုတ္ဘူး... DDR အဆင့္ေတြဘဲသံုးထားတာေတြ႔ရတယ္... CPU က support ေပးႏုိင္တာလည္း DDR ဘဲေပးႏိုင္တာေၾကာင့္လည္းပါတယ္... ဒီေတာ့ ဘာျဖစ္လည္းဆိုေတာ့ DDR ရဲ႔ rate အရ cache storage ပိုင္းမွာ ထိမ္းသိမ္းႏုိင္မွဳ႕မရွိဘူး...
အဲဒီ့အခ်က္ႏွစ္ခ်က္အရ user တစ္ေယာက္ဟာ Tablet ရဲ႔ background ကိုေျပာင္းလိုက္သည္ျဖစ္ေစ၊ lock background ကိုေျပာင္းလိုက္သည္ျဖစ္ေစ... အဲဒီ့ပံုဟာ မူယင္ Firmware ထဲကပံုလို ေနရာယူၿပီးသားမဟုတ္တဲ့အတြက္ cache ထဲကို ယာယီပို႕ေပးလိုက္တယ္... ၿပီးမွ အဲဒီ့ပုံကို Picture->RAM Cache->CPU Cache->Process ဆိုတဲ့ပံုစံနဲ႔သြားတယ္ဆိုေတာ့...
Cache မေကာင္းတဲ့ တစ္နည္းအားျဖင့္ Cache မႏိုင္တဲ့အတြက္ ေနာက္တစ္နည္း Cache ကေန လက္ခံႏိုင္စြမ္းထက္ပိုေနတဲ့ ပံုေတြဆိုရင္... ေျပာင္းလဲစဥ္မွာေတာ့ ဘာမွ ျဖစ္မလာေသးဘဲ restart လုပ္လိုက္တဲ့အခါမွာ အဲဒီ့ပံုကို ဆြဲတင္ဖို႕ ေနရာမေလာက္ေတာ့တာေၾကာင့္ ဆြဲတင္လိုက္ ျပန္ျပဳတ္က်သြားလိုက္ျဖစ္ေနပါေတာ့တယ္...
process ကေတာ့ ပံုေျပာင္းလိုက္တာနဲ႔ အရင္ဆံုး sdcard ထဲက ပံုကို build.proc မွာ ref လုပ္ေပးထားတယ္... အဲဒီ့အခါ စက္ကို restart လုပ္တဲ့အခါမွာ အရင္ဆံုး default.prop ကိုဖတ္တယ္... ၿပီးေတာ့ built.proc ကိုဖတ္ၿပီး အဲဒီ့ထဲက ref ေတြအတိုင္းဘဲ display လုပ္တယ္... အဲဒီ့ေနရာမွာ background wallpaper တို႕ lock wallpaper တို႕ကို မူလ firmware ထဲကမဟုတ္ရင္ ram ေပၚမွာ ဆြဲတင္ရတယ္... ၿပီးမွ cpu က အလုပ္လုပ္ၿပီး ေနရာခ်တယ္... အဲဒီ့အခါ ram ေပၚဆြဲတင္ရင္း ram ရဲ႔ cache မွာ ေနရာမေလာက္ေတာ့တဲ့အခါ ျပႆနာတတ္ေတာ့တာဘဲ... ram ရဲ႔ cache မွာ သြင္းထားတဲ့ app ေတြရဲ႔ လင့္ေတြလည္းရွိတယ္...
ဒီျပႆနာကို ဘယ္လိုေျဖရွင္းမလည္း... အလြယ္ဆံုးနည္းကေတာ့ build.prop ကို၀င္ျပင္တာ အလြယ္ဆံုးဘဲ... ဒါမဲ့ အဲဒါက မေသခ်ာတဲ့နည္းတစ္ခုပါ... ဘာလို႕လည္းဆိုေတာ့ cache မွာ ေနရာယူထားတာေတြက တစ္ခါတစ္ေလ စက္ပိတ္လိုက္ေပမဲ့ ေပ်ာက္မသြားတတ္ဘူး... အဆိုးဆံုးကေတာ့ JVM လို႕ေခၚတဲ့ java virtual machine တစ္ခုျဖစ္တဲ့ dalvik ရဲ႔ cache မွာသိမ္းထားတာေတြက မပ်က္သြားပါဘူး... ဒီေတာ့ ဆြဲတင္စရာ လင့္မရွိေတာ့ေပမဲ့ ေနရာမေလာက္တဲ့ ျပႆနာေၾကာင့္ မရတာမ်ဳိးျဖစ္တတ္ပါတယ္... အဲဒီ့အခါမွာ အထိေရာက္ဆံုးကေတာ့ recovery mode ကေန၀င္ၿပီး wipe cache partition ကိုလုပ္ဖို႕ပါဘဲ...
တစ္ခါတည္းနဲ႔ ကိစၥျပတ္ၿပီးခ်င္ရင္ေတာ့ factory restore ေပါ့... factory restore မလုပ္ခင္မွာ wipe cache ကိုေတာ့ လုပ္ဖို႕မေမ့ပါနဲ႔...
ေျပာလို႕သာေျပာရတယ္ allwinner chipset သံုးတဲ့ android rom ေတြမွာ recovery partition ကို deactivate လုပ္ထားတာမ်ားတယ္... အဲဒါကိုေတာ့ အရင္ဖြင့္ရင္ဖြင့္ မဖြင့္ခ်င္ရင္ cwm ေလးတင္းေပးၿပီးမွ လုပ္လို႕ရပါတယ္ဆိုတဲ့အေၾကာင္း သတင္းေကာင္းပါးရင္း....
ေလ့လာေတြ႔ရွိမွဳ႔ကို သတိျပဳစရာအျဖစ္ တင္ျပလိုက္ရေၾကာင္းပါခင္ဗ်ာ...

Boot Looping ျဖစ္ေနတဲ့ Tablet ကို ကြန္ပ်ဴတာမွာ ဒီတတ္သိတယ္ဆိုရင္

Boot Looping ျဖစ္ေနတဲ့ Tablet ကို ကြန္ပ်ဴတာမွာ ဒီတတ္သိတယ္ဆိုရင္ -
(၁) အရင္ဆံုး cpu ဘာအမ်ဳိးအစားလည္းအရင္ၾကည့္ဖို႕အတြက္
- adb shell "cat /proc/cpuinfo"
(၂) အဲလိုၾကည့္ၿပီးတဲ့အခါ cpu က A10 ျဖစ္ေနရင္ ဒီဟာကိုေဒါင္း
- http://www.mediafire.com/?3pzu1r49zpf6sp9
(၃) CPU က A13 ျဖစ္ေနရင္ ဒီဟာကိုေဒါင္း
- http://www.mediafire.com/view/?ju47s14jv1l30yr
(၄) ေဒါင္းၿပီးၿပီဆိုရင္ ျဖည္လုိက္တဲ့အခါ recovery.img ဆိုတာရမယ္... A10 အတြက္ကေတာ့ ျဖည္စရာမလိုဘူး...
(၅) အဲဒီ့ ရလာတဲ့ recovery.img ကို storage ကိုပို႕ရမယ္...
- adb push recovery.img /mnt/sdcrard
(၆) ၿပီးရင္ လက္ရွိ firmware ကို ဘက္ကပ္ယူရမယ္... အဲဒီ့အတြက္
- adb shell
- su
- mkdir /sdcard/dump
- cat /dev/block/nandc > /sdcard/dump/boot.img
- cat /dev/block/nanda > /sdcard/dump/bootloader.img
- cat /dev/block/nandg > /sdcard/dump/recovery.img
- busybox tar -cvf /sdcard/dump/d2_system.tar /system
(၇) အေပၚကအဆင့္ေတြၿပီးသြားရင္ ဘက္ကပ္ယူထားတာေတြကို ကြန္ပ်ဴတာထဲဆြဲယူ
- adb pull /mnt/sdcard/dump/*
(၈) recovery သြင္းမယ္...
- adb shell
- su
- cat /mnt/sdcard/recovery.img > /dev/block/nandg
(၉) ၿပီးရင္ ရီကာဗာရီ reboot လုပ္ရမယ္...
- adb shell
- su
- echo -n boot-recovery | busybox dd of=/dev/block/nandf count=1 conv=sync; sync; reboot
ျပန္တတ္လာတဲ့အခါမွာ cwm recovery နဲ႔တတ္လာမယ္... အဲဒီ့အခါမွာမွ wise data လုပ္ၿပီး factory reset လုပ္လိုက္.. ျပန္တတ္လာလိမ့္မယ္...
အခုသြင္းတဲ့ recovery က ေနာက္တစ္ႀကိမ္ ျပန္ေခၚခ်င္ရင္
- adb shell
- su
- echo -n boot-recovery | busybox dd of=/dev/block/nandf count=1 conv=sync; sync; reboot
အဲလိုမွ ရမယ္... ဘာလို႕လည္းဆိုေတာ့ recovery ကို active ယာယီလုပ္ထားလို႕ဘဲ...
(MARG)
(*** download ဖိုင္ေတြမွာ ဘာ password မွ ခံမထားပါဘူး... ေစတနာ ယတိျပတ္နဲ႔ ေပးတာပါ... ***)

ဆမ္ေဆာင္း ဟမ္းဆက္အခ်ဳိ႔ေတြမွာ သံုးႏုိင္တဲ့ အေရးႀကီး ussd code ေတြပါ

Information
*#44336# Software Version Info
*#1234# View SW Version PDA, CSC, MODEM
*#12580*369# SW & HW Info
*#197328640# Service Mode
*#06# = IMEI Number.
*#1234# = Firmware Version.
*#2222# = H/W Version.
*#8999*8376263# = All Versions Together.
*#272*imei#* Product code
*#*#3264#*#*- RAM version
*#92782# = Phone Model
*#*#9999#*#*= Phone/pda/csc info

Testing
*#07# Test History
*#232339# WLAN Test Mode
*#232331# Bluetooth Test Mode
*#*#232331#*#*- Bluetooth test
*#0842# Vibration Motor Test Mode
*#0782# Real Time Clock Test
*#0228# ADC Reading
*#32489# (Ciphering Info)
*#232337# Bluetooth Address
*#0673# Audio Test Mode
*#0*# General Test Mode
*#3214789650# LBS Test Mode
*#0289# Melody Test Mode
*#0589# Light Sensor Test Mode
*#0588# Proximity Sensor Test Mode
*#7353# Quick Test Menu
*#8999*8378# = Test Menu.
*#*#0588#*#*- Proximity sensor test
*#*#2664#*#*- Touch screen test
*#*#0842#*#*- Vibration test*
Network
*7465625*638*# Configure Network Lock MCC/MNC
#7465625*638*# Insert Network Lock Keycode
*7465625*782*# Configure Network Lock NSP
#7465625*782*# Insert Partitial Network Lock Keycode
*7465625*77*# Insert Network Lock Keycode SP
#7465625*77*# Insert Operator Lock Keycode
*7465625*27*# Insert Network Lock Keycode NSP/CP
#7465625*27*# Insert Content Provider Keycode
*#7465625# View Phone Lock Status
*#232338# WLAN MAC Address
*#526# WLAN Engineering Mode -runs wlan tests (same as below)
*#528# WLAN Engineering Mode
*#2263# RF Band Selection-not sure about this one appears to be locked
*#301279# HSDPA/HSUPA Control Menu---change HSDPA classes (opt. 1-5)
Tools/Misc.
*#*#1111#*#*- Service Mode
#273283*255*663282*# Data Create SD Card
*#4777*8665# = GPSR Tool.
*#4238378# GCF Configuration
*#1575# GPS Control Menu
*#9090# Diagnostic Configuration
*#7284# USB I2C Mode Control—mount to usb for storage/modem
*#872564# USB Logging Control
*#9900# System dump mode- can dump logs for debugging
*#34971539# Camera Firmware Update
*#7412365# Camera Firmware Menu
*#273283*255*3282*# Data Create Menu- change sms, mms, voice, contact limits
*2767*4387264636# Sellout SMS / PCODE view
*#3282*727336*# Data Usage Status
*#*#8255#*#*- Show GTalk service monitor-great source of info
*#3214789# GCF Mode Status
*#0283# Audio Loopback Control
#7594# Remap Shutdown to End Call TSK
*#272886# Auto Answer Selection
****SYSTEM***
USE CAUTION
*#7780# Factory Reset
*2767*3855# Full Factory Reset
*#*#7780#*#* Factory data reset
*#745# RIL Dump Menu
*#746# Debug Dump Menu
*#9900# System Dump Mode
*#8736364# OTA Update Menu
*#2663# TSP / TSK firmware update
*#03# NAND Flash S/N

spreadtrum cpu သံုးတဲ့ rom ေတြရဲ႔ partition စနစ္ဖြဲ႕စည္းပံုပါ

spreadtrum cpu သံုးတဲ့ rom ေတြရဲ႔ partition စနစ္ဖြဲ႕စည္းပံုပါ..
root အတြက္ partition ေတြကို remount ဖို႕အတြက္ အသံုးတည့္ပါတယ္
/dev/block/mtdblock11 /system yaffs2 ro,relatime 0 0
/dev/block/mtdblock12 /data yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock13 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock8 /runtimenv yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock6 /backupfixnv yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock17 /productinfo yaffs2 rw,nosuid,nodev,relatime 0 0
/dev/block/mtdblock5 /fixnv yaffs2 rw,nosuid,nodev,relatime 0 0