2012/06/21

Simlock & building android kernel module

Аль өнгөрсөн өвөл 30 еврогоор simlock-той Huawei u8180 (Ideos X1) гэдэг Андройд гар утас авав. Simlock-ыг нь эс тооцвол дажгүй хөөрхөн утас аж. Уг нь 10 ногооноор simlock гаргана гэсэн үйлчилгээнүүд интернетээр дүүрэн байна. 30 евроны утсыг 10 доллар төлж түгжээ гаргахад дэндүү харамсалтай санагдаад, дээрээс нь бас ер нь яаж simlock гаргадаг юм бол гэсэн сониуч зан хөдөлсөн тул өөрөө түгжээ гаргадаг баатар болов. Simlock-ын тухай мэдээлэл интернетээр их ховор юм, бодвол зарим улсад түгжээ гаргах хориотой дээрээс бас зарим нөхдүүд мөнгө олох аргаа алдахгүй гэсэн юм болов уу даа.

Андройд гар утас маань Qualcomm MSM7225 гэсэн SoC-той юм байна. MSM7225 нь дотроо 2 ширхэг ARM процессор агуулдаг аж. 528 Mhz-ын хурдтай ARM11 процессор дээр нь Андройд үйлдлийн систем харин арай удаан ARM9 дээр нь GSM/UMTS-г хариуцсан AMSS (Advanced Mobile Subscriber Software) хэмээх үйлдлийн систем тус тус ажиллана. Энэ хоёр процессор дундаа 512MB-ын хэмжээтэй нэг л flash memory хувааж ашиглана. Гэхдээ AMSS нь Android-ын ашиглаж байгаа санах ойд хандаж болдоггүй, Андройд нь ч гэсэн нөгөө процессорын flash санах ойг хардаггүй аж.

Андройд, AMSS хоёр хоорондоо AT коммандын тусламжтайгаар харьцана. Хэрвээ та 99110000 гэсэн дугаар руу залгавал Андройд үйлдлийн систем AMSS руу зөвхөн "ATD 9911000" тушаал илгээнэ. Энэ тушаалыг аваад AMSS өгөгдсөн дугаар руу залгана. Андройд өөр юу ч хийхгүй, бусад дуудлагатай холбоотой бүх зүйлсийг зөвхөн AMSS хариуцна. Нэг ёсондоо Андройд маань гар утасны үйлдлийн систем биш харин зөвхөн гар утасны UI л гэсэн үг, харин AMSS маань гар утасны жинхэнэ үйлдлийн систем нь юм.

AMSS-д зориулсан flash санах ой дотор EFS2 гэсэн нэг partition байна. Энэ дотор IMEI (International Mobile Equipment Identity), SPL (Service Programming Code), simlock гэх мэт GSM/UMTS-тэй холбоотой бүх чухал мэдээлэл хадгалагдана. Тиймээс ямар нэгэн аргаар Андройдоос EFS2 partition-руу хандаж чаддаг байж түгжээ гаргадаг болно. Ингэхийн тулд янз бүрийн юм оролдож үзсэнээс хамгийн гайгүй арга нь kernel module бичиж харагдахгүй байгаа partition-уудыг харагдуулах арга байв.

Энэ аргыг ашиглахын тулд та гар утсаа шоронгоос гаргасан байхаас гадна Андройд SDK болон NDK 5b суулгасан байх хэрэгтэй. Үүний дараа та гар утсандаа тохирсон kernel олох хэрэгтэй. Би гар утсандаа таарсан kernel эндээс олов. Татаад задалсныхаа дараа гар утсаа компьютертэйгээ холбоод доорх тушаалуудыг бүрхүүл дээр бичээрэй:
  1. cd /path/to/kernel
  2. adb pull /proc/config.gz .
  3. gunzip config.gz
  4. mv config .config
  5. make ARCH=arm CROSS_COMPILE=/path/to/android/ndk5b/toolchains/arm-eabi-4.4.0/prebuilt/bin/linux-x86/bin/arm-eabi- modules_prepare
Одоо та шинэ хавтас үүсгээд дотор нь доорх файлыг mtd-hack.c гэж хадгална уу.


mtd-hack.c-г хадгалсан хавтас дотроо та хоосон Makefile үүсгээд дотор нь obj-m += mtd-hack.o гэж бичиж хадгалаарай. Одоо та доорх тушаалуудыг ашиглаад kernel module-аа build хийгээд, гар утас руугаа хуулж ажиллуулаарай:
  1. cd /path/to/mtd-hack-module
  2. make ARCH=arm CROSS_COMPILE=/path/to/android/ndk5b/toolchains/arm-eabi-4.4.0/prebuilt/bin/linux-x86/bin/arm-eabi- -C /path/to/kernel M=/path/to/mtd-hack-module modules
  3. adb push mtd-hack.ko /sdcard/mtd-hack.ko
  4. adb shell
  5. su
  6. cd /sdcard
  7. insmod mtd-hack.ko
Хэрвээ бүх зүйл амжилттай болсон бол таны бүх flash memory тань /dev/mtd/mtd9 гэсэн шинэ partition болж орж ирсэн байгаа. (EFS2 partition яаг хаана байгааг нь сайн мэдэхгүй байгаа учир бүх flash-аа нэг partition болгов) Та одоо энэ partition-ыг backup хийж авч болно:
  1. dd if=/dev/mtd/mtd9 of=/sdcard/fulldump.bin bs=4096
  2. rmmod mtd_hack
IMEI гэх мэд чухал мэдээллүүд EFS2 partition дотор хадгалагддаг гэж урьд нь бичсэн билээ. Энэ чухал мэдээлэл/тохиргоо бүрийг NV (non volatile) item гэж нэрлэх бөгөөд item болгон өөрийн дугаартай байна. IMEI жишээ нь 550 дахь item, харин AMSS version нь 60001 дэх item. Та одоо fulldump.bin файлаа дурын HEX editor-оор онгойлгоод "550n" эсвэл "60001n" гэж хайгаад үзээрэй, олдож байвал яаг тэнд чинь IMEI, AMSS version item-ууд хадгалагдсан байгаа.

Харамсалтай нь sim unlock key нь NV item биш, харин EFS2 дотор өөрийн гэсэн файл систем дотор perso.txt гэсэн файл дотор хадгалагдана. Тэгэхээр үүнийг эхлээд reverse engeneering хийж байж unlock key олно. Би одоохондоо үүнийг хийж амжаагүй байгаа. Гэхдээ цаад учрыг нь ольё гэхгүйгээр түгжээ гаргая гэвэл маш амархан арга нэг бий. Түгжээгүй утас нэгийг олоод EFS2-ыг нь backup хийгээд энэ backup-аа түгжээтэй утасруугаа хуулахад л хангалттай. Ингээд гар утас тань түгжээгүй болчихно. Гэхдээ арай л fun багатай арга юм даа...

5 comments:

  1. EFS2-g backup хийгээд өөр утас руу хуулчихаар тэр утаснуудын IMEI нь давхардаад нэг сүлжээнд ажиллахаа болихгүй юу?

    Тэр үл мэдэгдэх filesystem нь EFS2 дотор NV item байдлаар байгаа юу?

    Би хараахан оролдож амжаагүй л байна.

    ReplyDelete
    Replies
    1. 1. ijil IMEI tei baij bolohgui. Backup aa hex editor oor ongoilgoj baigaad l solichno. IMEI ees gadna Serial Number, Bluetooth adress aa bas zov tohiruulah heregtei baih.

      2. 1 NV item iin hemjee 128 byte bail uu daa. Tegeheer file system ni arai oor gazar baigaa. lav perso.txt geed haihaar yum garj irehgui baisan. Bodvol crypted l baigaa bolov uu...

      Delete
  2. shw-m110s утсыг яаж сим түүлкит аппийг нь ажилуулдаг болох вэээ туслаач

    ReplyDelete
  3. haha hezee bolohgui

    ReplyDelete