首页
社区
课程
招聘
[原创]揭露AMR隐私 - OD 手脱带 KEY 的 ARM 程序
发表于: 2006-3-26 13:52 29047

[原创]揭露AMR隐私 - OD 手脱带 KEY 的 ARM 程序

2006-3-26 13:52
29047

【脱壳作者】 刹那恍惚
【作者邮箱】 [email]RegKiller2002@yahoo.com.cn[/email]
【使用工具】 OllyDBG ,LordPE,ImportREC,PEiD v0.94
【脱壳平台】 WinXP SP2
【软件名称】 Win98 记事本
【软件大小】 568 KB
【保护选项】 Standard protection only 仅仅标准保护 + KEY 保护 (单进程)
【加壳方式】 Armadillo v4.40
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

--------------------------------------------------------------------------------
【脱壳内容】

关于 ARM 带 KEY 的问题 N 多人问过了。再次解答一次,首先我们必须有一个可用的 KEY 否则程序是无法解码的(前辈的话,我只是站了一下他们的肩膀.嘿嘿),对于 ARM 我了解甚少,我的理解是如果你的程序无 KEY 的话就好像你有个 RAR 却没密码无法解压一样。又有人要说 RAR 可以穷举了,拜托,我加 RAR 密码从来都是中文做密码,你举出来的话可以发一份给我做纪念。呵呵。跑题了没?跑了大家记得把我叫回来。OK。我们继续,首先我们要弄个可用的 KEY,然后替换我们的机器指纹为可用 KEY 的机器指纹,注册正确之后开始脱壳基本上就跟没脱没 KEY 的 ARM 完全相同了。下面是这个程序的一个可用 KEY 是我用 ARM 在另一台机器上加壳的。

Hardware fingerprint: 5F48-DD41

Name: RegKiller

Key: 00001K-VKY502-J4WZFV-GXFK3Z-KD82T6-C0K6UK-6PCH59-WUAZP9-EX7HGD-4K9KVF-W0CRJZ

一、准备工作

侦壳:用PEiD查壳 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks

老规矩设置Ollydbg忽略所有异常,用IsDebug 1.4插件去掉Ollydbg的调试器标志。

OD 载入

Shift+F9 运行,直到程序提示:This program requires a security key. If you have one, select OK to enter it. After entering a valid key, you will not be prompted again.

按 OK 按钮让程序弹出输入 KEY 的对话框,记下你自己的 Hardware fingerprint(我这里是 Hardware fingerprint: 0073-3907 这个值一会要用) 然后回到 OD下 he GetDlgItem 断点后回到程序随便输入一个名字和 KEY 后按 OK 按钮。断下后看堆栈提示

00128088   00C244FC  /CALL 到 GetDlgItem 来自 00C244FA
0012808C   000607F0  |hWnd = 000607F0 ('Enter Key',class='#32770')
00128090   00000407  \ControlID = 407 (1031.)

ALT+F9 返回程序领空

00C244FC    85C0            TEST EAX,EAX                             ; 返回到此处
00C244FE    74 33           JE SHORT 00C24533

此时你可以找这段代码的开始处下硬件执行断点然后 Ctrl+F2 重载程序再分析。

这里我就不这么做了。删除刚才的硬件断点,向下找到这段代码

00C2467D   /0F84 B7000000   JE 00C2473A
00C24683   |53              PUSH EBX
00C24684   |B9 98FAC300     MOV ECX,0C3FA98
00C24689   |E8 253CFEFF     CALL 00C082B3                            ; 右键跟随
00C2468E   |53              PUSH EBX
00C2468F   |B9 98FAC300     MOV ECX,0C3FA98
00C24694   |8945 08         MOV DWORD PTR SS:[EBP+8],EAX
00C24697   |E8 353CFEFF     CALL 00C082D1
00C2469C   |837D 14 01      CMP DWORD PTR SS:[EBP+14],1
00C246A0   |75 27           JNZ SHORT 00C246C9
00C246A2   |8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
00C246A5   |8BC8            MOV ECX,EAX
00C246A7   |81E1 FFFF0000   AND ECX,0FFFF
00C246AD   |C1E8 10         SHR EAX,10
00C246B0   |51              PUSH ECX
00C246B1   |50              PUSH EAX
00C246B2   |8D85 00FFFFFF   LEA EAX,DWORD PTR SS:[EBP-100]
00C246B8   |68 C496C300     PUSH 0C396C4                             ; ASCII "%04X-%04X"
00C246BD   |50              PUSH EAX
00C246BE   |FF15 1063C300   CALL DWORD PTR DS:[C36310]               ; msvcrt.sprintf

ASCII "%04X-%04X" 这个是谁?小谁家那小谁嘛,呵呵。向上看.我们再 00C24689 处的 CALL 右键跟随(也就是进入这个 CALL)来到下面代码处

00C082B3    56              PUSH ESI                                 ; 来到此处
00C082B4    8BF1            MOV ESI,ECX
00C082B6    FF7424 08       PUSH DWORD PTR SS:[ESP+8]
00C082BA    8B8E 5C060000   MOV ECX,DWORD PTR DS:[ESI+65C]
00C082C0    6A 00           PUSH 0
00C082C2    E8 24D70000     CALL 00C159EB                            ; 右键跟随
00C082C7    3386 5C200000   XOR EAX,DWORD PTR DS:[ESI+205C]          ; 问题 1 下面解答
00C082CD    5E              POP ESI
00C082CE    C2 0400         RETN 4

这里有 2 种方式(我测试了2个带KEY的ARM壳,所以我只碰到了2种方式。一会说明)

我们继续在 00C082C2 处的 CALL 右键跟随来到下面代码处

00C159EB    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]
00C159EF    C1E0 06         SHL EAX,6
00C159F2    034424 08       ADD EAX,DWORD PTR SS:[ESP+8]
00C159F6    8B4481 18       MOV EAX,DWORD PTR DS:[ECX+EAX*4+18]
00C159FA    35 8AC0E665     XOR EAX,65E6C08A
00C159FF    C2 0800         RETN 8                                   ; 在此设置个断点

现在在 00C159FF 上设置一个硬件执行断点,然后 Ctrl+F2 重载程序并 SHIFT+F9 执行.断下后注意看 EAX 的值,我这里是 00733907,这个是什么?不就是刚才的 0073-3907 机器指纹吗?现在你应该知道怎么做了吧 ? 找个空白地方写个补丁代码就可以了。我这里用 OD 的动态分配内存插件分配个空间写个补丁.我得到的地址是 30000000 . 补丁代码入下,你也可以直接找个地方写代码而不用插件分配内存。

原代码:
00C159FA    35 8AC0E665     XOR EAX,65E6C08A

补丁代码:

00C159FA  - E9 01A63E2F     JMP 30000000

注意当前的 EIP 是 00C159FF .我们把 EIP 重新定位到 00C159FA 处后 F8 一次就来到我们要写修改指纹的空间了。写下如下代码

30000000    35 8AC0E665     XOR EAX,65E6C08A                         ; 恢复原来的代码
30000005    3D 07397300     CMP EAX,733907                           ; 判断当前是否是机器指纹 0073-3907
3000000A    75 05           JNZ SHORT 30000011                       ; 不是跳走
3000000C    B8 41DD485F     MOV EAX,5F48DD41                         ; 替换成可用 KEY 的指纹 5F48-DD41
30000011    C2 0800         RETN 8                                   ; 原来的代码

改好后 SHIFT+F9 然后输入 KEY.就能看到正确提示了:Key is valid, and has been stored.确定后就可以按照无 KEY 的 ARM 脱壳了。

关于刚才的问题 1 现在解答一下,那个地方其实也是个 ARM KEY 断点的好地方,不过 ARM 的 KEY 分几种,简单说下,本例子是个长的 KEY.还有种比较短的 KEY ,当你遇到短 KEY 的时候根据下面的方法下断打补丁.

长 KEY 的时候在这里开始补丁.

XOR EAX,65E6C08A
RETN 8

短 KEY 的时候在上面的 RENT 8 返回后会来到下面这个地方。

00C082C7    3386 5C200000   XOR EAX,DWORD PTR DS:[ESI+205C]          ; 问题 1 下面解答
00C082CD    5E              POP ESI
00C082CE    C2 0400         RETN 4

F8 单步走过 00C082C7 后再看 EAX 的值就是你的本机指纹了,补丁方法跟上面相同,不多说了。
--------------------------------------------------------------------------------
【脱壳总结】

本问没什么技术含量,如有错误之处请各位赐教。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[注意]APP应用上架合规检测服务,协助应用顺利上架!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (36)
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
2
用Ollydbg手脱带 KEY 的 Armadillo v4.x壳
实战Armadillo的 EI3 带 KEY 脱衣

动画下载:取消下载免的又有人说我做广告
补充了一个双进程带 KEY 的动画

思路是先转成单进程,然后在用上面方法。

动画下载:取消下载免的又有人说我做广告
2006-3-26 13:52
0
雪    币: 228
活跃值: (25)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
沙发不易
好文藏之
2006-3-26 14:00
0
雪    币: 259
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
我顶,抢位置,
谢谢刹那,
2006-3-26 14:01
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
搬个板凳来
2006-3-26 14:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
搬个板凳来....
2006-3-26 15:55
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,KILLER兄的文章要顶下啊
2006-3-26 16:50
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
看了下 似乎只是适用于Standard protection 和min。。

要是双进程的就不行了
2006-3-27 06:50
0
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
9
双进程先分离进程转成单进程后再用上面方法

2006-3-27 11:13
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 machenglin 发布
思路是很不错,值得学习。

“首先我们要弄个可用的 KEY,然后替换我们的机器指纹为可用 KEY 的机器指纹”这个可用的KEY无法得到,这是关键。

对!
2006-3-27 20:46
0
雪    币: 217
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
如果有一组在其它机上可用的key 是可以在本地机上做出这个程序key的keygen的 也就是硬件算法注册机。
2006-3-28 08:23
0
雪    币: 510
活跃值: (483)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
最初由 骨灰C 发布
如果有一组在其它机上可用的key 是可以在本地机上做出这个程序key的keygen的 也就是硬件算法注册机。


MM灰,说来听听。
2006-3-28 09:09
0
雪    币: 147
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主,按照你的方法到最后注册时提示错误,是什么原因?
提示信息:The name/key you entered does not appear to be valid. Please try again.
请高手指点.
2006-8-2 16:08
0
雪    币: 196
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好强的老手哦,向各位大侠学习
2006-8-22 00:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
今天刚翻到的老帖子,有个问题,若是带key的程序同时有功能限制或者日期限制之类的试用的话,那么有没有可能在无key的情况下脱出来?
2006-11-10 11:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我现在遇到这样的问题,用Armadillo加的壳,也有做一个注册机,其中保存了ARM工程文件,但是不知为什么,现在密码算出来没有用了,自己不知哪儿改了工程文件忘了。请示帮助!
2006-11-18 13:08
0
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xzc
17
我有个Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks带KEY的,机器码改了别人的机器,但输入那个机器码正的注册码还是会提示,错误
2007-2-2 15:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我用文章里给出的KEY打补丁后,机器指纹虽然变了,但还是提示用户名或KEY无效,这是什么原因?还望Killerd大哥帮帮忙……我的E-mail:suibiannibo@163.com
2007-6-8 00:03
0
雪    币: 328
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
19
双进程怎样转单进程,讲讲?
2007-6-14 23:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
双进程的!!
2007-10-17 13:27
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
看不明白。。。。。。。。。。。。。
2007-10-17 21:33
0
雪    币: 196
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我是菜鸟要向刹那多学习,刹那多指点!!!
2007-10-24 16:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
2007-10-25 07:24
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习了.............
2008-2-15 17:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
为什么取消动画下载呀?对新手可以学习参考~~~
2008-4-7 12:25
0
游客
登录 | 注册 方可回帖
返回
//