Saturday, October 14

วิธีแงะโปรแกรม อยากรู้ก็เข้ามาดูครับ

--อันดับแรก ต้องใช้ ida pro หาจุดที่จะแก้ไข ถ้าทราบแล้วสามารถใช้ hex editor หาแล้วแก้ได้เลย ดังขั้นตอนท้ายๆ ส่วนใหญ่โปรแรกมของค่ายนี้ เช่น fscaller ,fileman ,sAnwser , จะแงะเหมื่อนกันหมด ดังนั้นจึงข้ามไปข้อ 15 ได้เลยเมื่อต้องการแงะโปรแกรมของ symbianware แต่ทั้งนี้ ควรจะศึกษาวิธีหาจุดแงะก่อน ซึงแต่ละโปรแกรมจะไม่เหมือนกันครับ

1.เปิดไฟล์ smartfileman.app ด้วยโปรแกรม ida pro
2.เลือก processer เป็น ARM
3.จะพบข้อความดังนี้
.text:10000000 ; ORG 0x10000000
.text:10000000 CODE32
.text:10000000 DCD 0xF00BB500, 0xBC02FA61, 0x4708, 0xB082B5F0, 0x1C0E1C05
.text:10000000 DCD 0x1C1C1C17, 0xF00C2098, 0x1C02FB4F, 0xD0092A00, 0x98079400
.text:10000000 DCD 0x1C109001, 0x1C321C29, 0xF0001C3B, 0x1C02F80D, 0x49046810
.text:10000000 DCD 0x1C106F43, 0xF9F8F00C, 0xBCF0B002, 0x4708BC02, 0x5DA8D027
4.ถ้าเป็นแบบนี้ต้องเปลี่ยน CODE ให้เป็น 16 โดยคลิกที่CODE32 กด alt+G ใส่ value= 1 ลงไป จากนั้นไปที่เมนู edit->begin seletion
กดเลือก และเลื่อนไปที่ล่างสุด คือเลือกแถบสีทั้งหมด แล้วไปที่เมนู edit->code->force->yes รอสักครู่ จะได้ดูรู้เรื่องครับ บางโปรแกรมไม่ต้องทำ
5.ไปที่ options->general->autocomment เพื่อแสดงรายละเอียด
6.จะกลายเป็นแบบนี้
.text:10000000 ; ORG 0x10000000
.text:10000000 CODE16
.text:10000000 PUSH {LR} ; Push registers
.text:10000002 BL sub_1000B4C8 ; Branch with Link
.text:10000006 POP {R1} ; Pop registers
.text:10000008 BX R1 ; Branch to/from Thumb mode
7.โปรแกรม จะมีหลายหน้าต่าง หน้าแรกสุด คือหน้า ida viewหน้าต่อมาคือ hex view ซึ่งทั้งสองแบบไม่สามารถแก้ไขอะไรได้
8.ในโฟลเดอร์ทีแตกไฟล์ fileman.sis จะได้ไฟล์ .rsc .ให้ลากไปใส่ไฟล์ erl.exe จะได้ไฟล์ .txt เพิ่มขึ้นมา ดังนี้ [ย่อๆ]

79 4Fh 5DA8D04F String Register
80 50h 5DA8D050 String Register info
81 51h 5DA8D051 String Reg. engine error!
82 52h 5DA8D052 String Version 1.03
83 53h 5DA8D053 String (Registered)
84 54h 5DA8D054 String (Trial) ---->>>ตรงนี้แหละครับ ที่เราต้องจัดการ D054 เวลาใช้ต้องกลับกัน จากหลังมาหน้า ที่ละ 2 ตัว 54 D0

9.ไปที่ hexview กดเมนู serch->text ใส่คำว่า 54 DO [วรรคทีละ 2 ]

10.พอเจอแล้วกลับมาที่หน้า ida view ดังนี้
.text:1000B748 dword_1000B748 DCD 0x5DA8D049 ; DATA XREF: .text:1000B65Er
.text:1000B74C dword_1000B74C DCD 0x5DA8D054 ; DATA XREF: .text:1000B674r --->> คลิกที่นี่
.text:1000B750 dword_1000B750 DCD 0x5DA8D04B ; DATA XREF: .text:1000B68Cr
.text:1000B754 off_1000B754 DCD loc_100059BC+1 ; DATA XREF: .text:1000B6CCr
.text:1000B758 dword_1000B758 DCD 0x514 ; DATA XREF: .text:1000B6D8r

10.จะมาที่นี่
.text:1000B648 loc_1000B648 ; CODE XREF: .text:1000B610j ------>>>> คลิกที่นี่ เพื่อไปฟังค์ชั่นตรวจสอบ
.text:1000B648 ADD R0, SP, #0x100 ; Rd = Op1 + Op2
.text:1000B64A MOV R1, #0x32 ; Rd = Op2
.text:1000B64C BL sub_1000C6F8 ; Branch with Link
.text:1000B650 ADD R0, SP, #0x16C ; Rd = Op1 + Op2
.text:1000B652 MOV R1, #0x32 ; Rd = Op2
.text:1000B654 BL sub_1000C6F8 ; Branch with Link
.text:1000B658 ADD R5, SP, #0x16C ; Rd = Op1 + Op2
.text:1000B65A BL sub_1000CC80 ; Branch with Link
.text:1000B65E LDR R1, =0x5DA8D049 ; Load from Memory
.text:1000B660 BL sub_1000CC8C ; Branch with Link
.text:1000B664 ADD R1, R0, #0 ; Rd = Op1 + Op2
.text:1000B666 ADD R0, R5, #0 ; Rd = Op1 + Op2
.text:1000B668 BL sub_1000C75C ; Branch with Link
.text:1000B66C BL sub_1000C6D4 ; Branch with Link
.text:1000B670 BL sub_1000CC80 ; Branch with Link
.text:1000B674 LDR R1, =0x5DA8D054 ; Load from Memory --->>>[ แสดงคำว่า ไม่ลงทะเบียนหรือทดลองใช้ Trial]

11.มาที่ฟังค์ชั่นตรวจสอบว่าลงทะเบียนหรือยัง
.text:1000B600 BL sub_1000AE30 ; Branch with Link --->>> คลิกที่นี่ อันนี้คือฟังค์ชั่นตรวจสอบ
.text:1000B604 CMP R0, #0 ; Set cond. codes on Op1 - Op2 --->>เปรียบเทียบค่า
.text:1000B606 BNE loc_1000B6B0 ; Branch -->>> ถ้า R0 ไม่เท่ากับ 0 ก็ไปที่อื่นคือไม่ต้องแสดงคำว่า trial หรือหมดอายุ
.text:1000B608 MOV R0, SP ; Rd = Op2
.text:1000B60A BL sub_1000AE84 ; Branch with Link
.text:1000B60E CMP R0, #0 ; Set cond. codes on Op1 - Op2 ------>>>
.text:1000B610 BEQ loc_1000B648 ; Branch --->>> 54 DO แสดงคำว่า Trial [จากข้อ 10]
.text:1000B616 LDR R1, =0x5DA8D049 ; Load from Memory
.text:1000B618 LDR R2, =0x5DA8D04A ; Load from Memory -->>4A DO= หมดอายุ Program's trial period is over! ดูข้อ 8

12.พอคลิกที่ BL sub_1000AE30 ; Branch with Link จะมาที่นี่

.text:1000AE30 sub_1000AE30 ; CODE XREF: sub_1000AD14+1Ap
.text:1000AE30 ; .text:1000B600p ...
.text:1000AE30 PUSH {R4,R5,LR} ; Push registers
.text:1000AE32 SUB SP, SP, #8 ; Rd = Op1 - Op2
.text:1000AE34 ADD R5, R0, #0 ; Rd = Op1 + Op2
.text:1000AE36 ADD R0, #0xF8 ; Rd = Op1 + Op2
.text:1000AE38 LDR R0, [R0] ; Load from Memory
.text:1000AE3A CMP R0, #0 ; Set cond. codes on Op1 - Op2
.text:1000AE3C BEQ loc_1000AE5C ; Branch --->> เปลี่ยนตรงนี้ครับ 0E D0
.text:1000AE3E MOV R4, SP ; Rd = Op2
.text:1000AE40 LDR R1, =loc_1000F310 ; Load from Memory
.text:1000AE42 ADD R0, R4, #0 ; Rd = Op1 + Op2
.text:1000AE44 BL sub_1000C6E0 ; Branch with Link
.text:1000AE48 ADD R0, R5, #0 ; Rd = Op1 + Op2
.text:1000AE4A ADD R1, R4, #0 ; Rd = Op1 + Op2
.text:1000AE4C BL sub_1000C6EC ; Branch with Link
.text:1000AE50 MOV R1, #0 ; Rd = Op2
.text:1000AE52 CMP R0, #0 ; Set cond. codes on Op1 - Op2
.text:1000AE54 BNE loc_1000AE58 ; Branch
.text:1000AE56 MOV R1, #1 ; Rd = Op2
.text:1000AE58
.text:1000AE58 loc_1000AE58 ; CODE XREF: sub_1000AE30+24j
.text:1000AE58 CMP R1, #0 ; Set cond. codes on Op1 - Op2
.text:1000AE5A BEQ loc_1000AE64 ; Branch
.text:1000AE5C
.text:1000AE5C loc_1000AE5C ; CODE XREF: sub_1000AE30+Cj ลิงค์มาจากด้านบน ดูเส้นเชื่อมโยงทางซ้ายสุด
.text:1000AE5C MOV R0, #0 ; Rd = Op2 --->>>>> แล้วก็ตรงนี้ด้วย 00 20
.text:1000AE5E B loc_1000AE7C ; Branch

13.จากข้อ 10 -11 คือถ้าถ้า R0 = 0 หมายถึงไม่ได้ลงทะเบียน ดังนั้น จึงต้องเปลี่ยนจาก MOV R0, #0 เป็น MOV R0,#1
แล้ว จาก BEQ loc_1000AE5C ; Branch ต้องเปลี่ยนเป็น B loc_1000AE5C คือไม่ต้องเปรียบเทียบค่า [BEQ หมายถึง เท่ากัน ถึงจะไปยังตำแหน่งนั้นๆ]

14.คลิกที่บรรทัด ที่จะเปลี่ยน แล้วเปลี่ยนเป็นหน้า hex view ดังนี้ แล้วเปิดโปรแกรม Hex editor เพื่อเตรียมแก้ไข โดยใช้คำสั่งค้นหา hex value
ida view=BEQ loc_1000AE5C -> B loc_1000AE5C
hex view=00 28 0E D0 6C 46 เปลี่ยนเป็น 00 28 0E E0 6C 46

MOV R0, #0 เป็น MOV R0,#1
03 D0 00 20 0D E0 เปลี่ยนเป็น 03 D0 01 20 0D E0

15.สรุปคือใช้ hex editor ค้นหา 2 ครั้ง
-ครั้งแรก ใส่คำว่า 00280ED06C46 แล้วแก้ไขตามด้านบน
-ครั้งที่สอง ใส่คำว่า 03D000200DE0 แล้วแก้ไขตามด้านบน

16.เซฟไฟล์ .app ไว้ แล้วลองส่งเข้าเครื่อง เพื่อทดสอบ

17.หากเรียบร้อยแล้ว ให้นำไป makesis ต่อไปเพื่อความสมบูรณ์

18.วิธีนี้สามารถแครกโปรแกรมของบริษัท symbianware ได้ทั้งหมด ทุกเวอร์ชั่น เช่น Fscaller,Powercar,PowerLock,Keylocker,Smartlauncher, เป็นต้น
โดยเพียงแต่หาจุดแครก เพียงสองจุด ตามข้อ 14-15 ด้านบน แล้วแก้ไขโดย hex editor เท่านั้น ไม่ต้องใช้ ida pro อีก

No comments: