首页
社区
课程
招聘
[原创]第一次写PPC程序破解教程--PPCMorse自己弹出注册码,高手略过。
发表于: 2008-5-20 09:31 19595

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

2008-5-20 09:31
19595

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

图01

2、运行前面提到的IDA工具。当IDA 问你处理器的种类(processor type)时,请选择ARM Processor: ARM就可以了。

图02

图03

3、用IDA分析完毕后,回到IDA用shift+F4打开the names window搜索“OK”,这个字符串来自软件注册的OK按钮。

图04

CDialog::OnOK(void)                               0001778C   

应该差不多就是与注册算法相关的信息了。
往上溯

图05

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后断下。

图06

观察LR的值,往上溯。

图07

图08

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”。

图09

往上溯。
.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查其它指令机器码了。

图10

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转化一下要修改的地址,再编辑后保存。

图11

图12

修改后如下图

图13

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

图14

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
作者还是犯了个低级错误——明码比较
2008-5-20 11:13
0
雪    币: 256
活跃值: (753)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
综合应用的好文,又是PPC,收藏学习!
2008-5-20 12:35
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
PPC和SP上的软件保护相对还是比较简单的,因为受硬件环境的影响,过多的代码用于软件保护上,会影响程序的执行效率吧?
2008-5-20 15:58
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主用IDA 5.2动态调试WM6 PPC程序正常?我调试WM6和WM6.1 平台的SP程序时,IDA总是异常退出,WM5平台调试正常。
2008-5-20 16:03
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
上次好像论坛哪个帖子提到IDA 5.1的没问题,你将5.1的插件移到5.2上试一下看看。
2008-5-20 17:20
0
雪    币: 415
活跃值: (71)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
我这IDA 5.2能正常调试。
2008-5-20 17:36
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
8
楼主是P坛的版主马甲?
2008-5-24 09:52
0
雪    币: 81
活跃值: (41)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
9
顶一下,很详细
2008-8-27 12:23
0
雪    币: 253
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
讲得比较通俗。
2008-8-27 19:01
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
希望越来越多的人关注这个版块,顶起来
2008-10-27 21:46
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
12
LZ的文章还是有很多可学之处的,多谢分享。
2008-10-28 10:30
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
很好的教程式文章
2008-10-28 10:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
图文并茂,头绪相当清晰!!
2008-10-28 11:43
0
雪    币: 222
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
怎么才能成VIP会员?
2008-10-28 22:04
0
雪    币: 218
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
很好的教程式文章
,谢谢
2008-11-1 20:25
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
不错,明码比较,很简单。
对于ARM的OPCODES,我一般都是直接在ADS的自带的IDE里边写内联汇编,看机器码,感觉挺爽,毕竟IDE里边可以选择目标设备的CPU类型。
2008-11-9 20:27
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
希望ARM及WINCE,MOBILE的文章更多一些。
2008-11-9 20:32
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
不错,学习了。。
2008-11-11 15:07
0
雪    币: 204
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
"模拟器中软件已运行,点Settings下Registration菜单,出现注册界面。输入任意注册码后,点OK后断下。"

不明白如何操作,能不能再详细一点。谢谢。
2008-11-26 08:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
那个公式的加减8和除4,没有看懂是怎么来的。
偏移量不是以字节为单位的?
另外8又是什么的空白出了8个字节??
能再帮解答一下不?
2008-12-10 13:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
那个公式的加减8和除4,没有看懂是怎么来的。
偏移量不是以字节为单位的?
另外8又是什么的空白出了8个字节??
能再帮解答一下不?
2008-12-10 13:28
0
雪    币: 2604
活跃值: (64)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
23
不错的文章值得收藏!
2008-12-27 08:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不错,mark一下
2015-8-30 14:04
0
游客
登录 | 注册 方可回帖
返回
//