欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

第一次写PPC程序破解教程--PPCMorse自己弹出注册码,高手略过。

第一次写PPC程序破解教程--PPCMorse自己弹出注册码,高手略过。

【目标程序】:  PPCMorse V 1.1
【破解目的】:  让程序自己弹出注册码
【应用平台】:  PocketPC
【作者声明】: 只是感兴趣,没有其他目的,看到论坛有兄弟需要,才献丑了。失误之处敬请诸位大侠赐教。
             
【调试环境】:WinXP、IDA pro 5.2 、Windows Mobile 6.0 模拟器包 for Pocket PC、lordpe 
             还有Yonsm大侠的CeleASM,用于查找对应机器码。
【联系方式】:emb2001@163.com   
————————————————————————————————— 
【分析过程】:
1、现在我们该开始了。如果你已经有过破解Windows软件的经验,再和PPC操作系统打交道就比较容易了。先熟悉一下软件,点Settings下Registration菜单,出现注册界面。输入任意注册后,没有提示就退出了。


2、运行前面提到的IDA工具。当IDA 问你处理器的种类(processor type)时,请选择ARM Processor: ARM就可以了。 
3、用IDA分析完毕后,回到IDA用shift+F4打开the names window搜索“OK”,这个字符串来自软件注册的OK按钮。 


CDialog::OnOK(void)                               0001778C   
应该差不多就是与注册算法相关的信息了。
往上溯
t:0001778C
.text:0001778C             ; =============== S U B R O U T I N E =======================================
.text:0001778C
.text:0001778C             ; Attributes: thunk
.text:0001778C
.text:0001778C             ; protected: virtual void __cdecl CDialog::OnOK(void)
.text:0001778C             _OnOK_CDialog__MAAXXZ    ; CODE XREF: .text:00015F2C_p
.text:0001778C                                      ; sub_16760+E4_p ...
.text:0001778C 00 C0 9F E5 LDR     R12, =__imp__OnOK_CDialog__MAAXXZ
.text:00017790 00 F0 9C E5 LDR     PC, [R12]
.text:00017790             ; End of function CDialog::OnOK(void)
4、在.text:0001778C 00 C0 9F E5 LDR     R12, =__imp__OnOK_CDialog__MAAXXZ 按F2下断点,按F9运行。
模拟器中软件已运行,点Settings下Registration菜单,出现注册界面。输入任意注册码后,点OK后断下。
观察LR的值,往上溯。



5、清除原有断点,在.text:00016818 loc_16818下,按F9运行。重新输入任意注册码后,点OK后断下。按F8步进。
.text:00016818 loc_16818
.text:00016818 LDR     R4, =unk_1C1C0
.text:0001681C MOV     R0, #0
.text:00016820 STR     R0, [R4]
.text:00016824 LDR     R0, =unk_1C100
.text:00016828 LDR     R1, [R0]        ; wchar_t *  准确注册码的unicode
.text:0001682C LDR     R0, [R5]        ; wchar_t *  输入假码的unicode
.text:00016830 BL      wcscmp             比较
.text:00016834 MOVS    R3, R0
.text:00016838 MOVEQ   R0, #1
.text:0001683C STREQ   R0, [R4]
.text:00016840 MOV     R0, R6
.text:00016844 BL      _OnOK_CDialog__MAAXXZ ; CDialog::OnOK(void)
.text:00016848 ADD     R0, SP, #0x430+var_430
.text:0001684C BL      __1CString__QAA_XZ ; CString::~CString(void)
.text:00016850 LDR     R0, =off_19118
.text:00016854 STR     R0, [SP,#0x430+var_428]
.text:00016858 ADD     R0, SP, #0x430+var_428
.text:0001685C BL      __1CFile__UAA_XZ ; CFile::~CFile(void)
.text:00016860 ADD     SP, SP, #0x420
.text:00016864 LDMFD   SP!, {R4-R6,PC}
.text:00016864 ; End of function sub_167
/////////////////////////////////////////////////////////////////////////////////////
//到此我们已经找到了注册码休息一下
////////////////////////////////////////////////////////////////////////////////////
6、pediy一下,让他弹出注册码,修改思路如下,可参照API资料。

.text:0001681C                 MOV     R3, #0
.text:00016820                 MOV     R2, #0
.text:00016824                 LDR     R0, =unk_1C100
.text:00016828                 LDR     R1, [R0]     准确注册码的
.text:0001682C                 MOV     R0, #0
.text:00016830                 BL      CWnd__MessageBoxW
打开IDA Imports window,搜索“MessageBoxW”。


往上溯。
.text:000176CC             ; =============== S U B R O U T I N E =======================================
.text:000176CC
.text:000176CC             ; Attributes: thunk
.text:000176CC
.text:000176CC             CWnd__MessageBoxW                       ; CODE XREF: .text:00012D3C_j
.text:000176CC                                                     ; sub_16760+D0_p
.text:000176CC 00 C0 9F E5                 LDR     R12, =__imp_CWnd__MessageBoxW
.text:000176D0 00 F0 9C E5                 LDR     PC, [R12]
.text:000176D0             ; End of function CWnd__MessageBoxW
.text:000176D0
找到MessageBoxW入口地址为000176CC
到现在可根据以下公式计算BL的偏移。
相对跳转,current为当前指令地址,des为目的地址,offset为偏移
    if(current < dest + 8)
    {
        offset = (dest - current- 8)/4;
    }else
    {
        offset = 0x1000000 - (current - dest +8 )/4;
    }
因00016830 处调用                BL      CWnd__MessageBoxW
计算offset = (176CC - 16830- 8)/4=3A5
BL的偏移得到了,就可以用Yonsm大侠的CeleASM查其它指令机器码了。


7、万事俱备,总结一下。
.text:0001681C 00 30 A0 E3                 MOV     R3, #0      ; uType    
.text:00016820 00 20 A0 E3                 MOV     R2, #0      ; lpCaption
.text:00016824 40 00 9F E5                 LDR     R0, =unk_1C100        原指令      
.text:00016828 00 10 90 E5                 LDR     R1, [R0]     ; lpText  原指令      
.text:0001682C 00 00 A0 E3                 MOV     R0, #0      ; hWnd
.text:00016830 A5 03 00 EB                 BL      CWnd__MessageBoxW
修改方法如下
先用lodepe的flc转化一下要修改的地址,再编辑后保存。

8、你现在运行这个软件看看,是不是成功了? 


/////////////////////////////////////////////////////////////////////////////////////
//第一次写教程,一个字“累”,比较破解软件本身累多了。终于可以休息了。
////////////////////////////////////////////////////////////////////////////////////

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功