首页
社区
课程
招聘
[旧帖] [原创]一次垃圾的分析过程 0.00雪花
发表于: 2009-1-28 12:06 4448

[旧帖] [原创]一次垃圾的分析过程 0.00雪花

2009-1-28 12:06
4448
【文章标题】: 一次垃圾的分析过程
【文章作者】: Monster
【作者邮箱】: suphack@vip.qq.com
【作者主页】: www.hackerm.com.cn
【作者QQ号】: 389264167
【软件名称】: 叫暗组文件加密器Ver1.0
【软件大小】: 508K
【下载地址】: 自己搜索下载
【加壳方式】: ASProtect V2.X Registered
【保护方式】: 密码
【编写语言】: MFC
【使用工具】: OD
【操作平台】: winxp
【软件介绍】: 一个文件加密的,没什么要多说的
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一次垃圾的逆向过程
  作者:Monster
  刚才找东西呢,无意中从0809期黑客X档案的光盘上找到了一规款文件加密工具,叫暗组文件加密器Ver1.0,既然是暗组的东西,应该不会太差吧。
  于是我随手写了个txt,给它加密了一下,密码是monster,用PEID来查了一下,结果是ASProtect V2.X Registered -> Alexey Solodovnikov *,嘿嘿,我这里正好有个脱ASProtect V2.X的脚本,结果脱了半天也没脱下来,老是有Anti,用隐藏OD的插件也不行,自己又懒得去分析,哎,牛人的脚本也有缺点啊。
  既然脱不了,那我们直接把OD附加上去,然后在OD中运行程序,选中我们加密的文件后,随便输入个密码,点"解密",那我们在OD中bp MessageBoxA给MessageBox函数下个断点,再点一下"解密",结果OD被断在了这里,我们Alt+F9让OD返回程序领空,于是OD来到了这里,我们看这里的代码:
  00401E0D  |.  85C0          test    eax, eax
  00401E0F  |.  74 16         je      short 00401E27           ;  判断文件名是否为空
  00401E11  |.  6A 30         push    30
  00401E13  |.  68 E8644100   push    004164E8
  00401E18  |.  68 08654100   push    00416508
  00401E1D  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E20  |.  E8 490D0000   call    00402B6E                 ;  提示文件名不能为空
  00401E25  |.  EB 7C         jmp     short 00401EA3
  00401E27  |>  6A 01         push    1
  00401E29  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E2C  |.  E8 490D0000   call    00402B7A                 ;  jmp 到 mfc42d.#5056
  00401E31  |.  68 7C634100   push    0041637C
  00401E36  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E39  |.  83C1 6C       add     ecx, 6C
  00401E3C  |.  51            push    ecx
  00401E3D  |.  E8 320D0000   call    00402B74                 ;  jmp 到 mfc42d.#813
  00401E42  |.  25 FF000000   and     eax, 0FF
  00401E47  |.  85C0          test    eax, eax                 ;  判断密码是否为空
  00401E49  |.  74 16         je      short 00401E61
  00401E4B  |.  6A 30         push    30
  00401E4D  |.  68 E8644100   push    004164E8
  00401E52  |.  68 BC644100   push    004164BC
  00401E57  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E5A  |.  E8 0F0D0000   call    00402B6E                 ;  提示密码不能为空
  00401E5F  |.  EB 42         jmp     short 00401EA3
  00401E61  |>  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E64  |.  83C1 68       add     ecx, 68
  00401E67  |.  E8 D80C0000   call    00402B44                 ;  jmp 到 mfc42d.#880
  00401E6C  |.  50            push    eax
  00401E6D  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E70  |.  E8 35F2FFFF   call    004010AA
  00401E75  |.  85C0          test    eax, eax                 ;  比较
  00401E77  |.  74 16         je      short 00401E8F           ;  关键跳转
  00401E79  |.  6A 40         push    40
  00401E7B  |.  68 B4644100   push    004164B4
  00401E80  |.  68 FC644100   push    004164FC
  00401E85  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E88  |.  E8 E10C0000   call    00402B6E                 ;  正确提示
  00401E8D  |.  EB 14         jmp     short 00401EA3
  00401E8F  |>  6A 10         push    10
  00401E91  |.  68 A0644100   push    004164A0
  00401E96  |.  68 F0644100   push    004164F0
  00401E9B  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
  00401E9E  |.  E8 CB0C0000   call    00402B6E                 ;  错误提示
  我们只要修改一下这些关键跳转就可以实现暴破了,但是有壳,不能修改,哎。
  我们在这里下断:
  00401E77  |. /74 16         je      short 00401E8F           ;  关键跳转
  再点"解密",OD就被断在了这里,这时我们在右边的寄存器窗口中修改一下符号位ZF的值,现在让OD运行起来,,结果它说注册成功了,我们打开txt,,如图12,还是没原来的样子,哎,OD这小子,什么时候学会骗人了?
  再来仔细看一下,发现这里是解密函数:
  00401E70  |.  E8 35F2FFFF   call    004010AA
  我们F7跟进,再跟踪几下,到了这里:
  0040257C   > \68 24654100   push    00416524                         ; /s2 = "Cute"
  00402581   .  8D55 DC       lea     edx, dword ptr [ebp-24]          ; |
  00402584   .  52            push    edx                              ; |s1
  00402585   .  E8 A6060000   call    00402C30                         ; \strcmp
  这里是比较密码的地方,我们往下看:
  0040258D   .  85C0          test    eax, eax                         ;  比较
  0040258F   .  74 07         je      short 00402598                   ;  密码正确则跳
  00402591   .  33C0          xor     eax, eax                         ;  eax清零
  00402593   .  E9 0E010000   jmp     004026A6                         ;  错误返回
  我们在这里下断:
  0040258F   . /74 07         je      short 00402598                   ;  密码正确则跳
  修改ZF的值,让它正确跳转,它提示"解密成功",打开txt看一下,成功了,以下是它的解密过程:
  004025C5   > /8B4D D4       mov     ecx, dword ptr [ebp-2C]
  004025C8   . |83C1 01       add     ecx, 1
  004025CB   . |894D D4       mov     dword ptr [ebp-2C], ecx
  004025CE   > |8B55 D4       mov     edx, dword ptr [ebp-2C]
  004025D1   . |3B55 E4       cmp     edx, dword ptr [ebp-1C]
  004025D4   . |7D 32         jge     short 00402608
  004025D6   . |8B45 F0       mov     eax, dword ptr [ebp-10]
  004025D9   . |8A48 60       mov     cl, byte ptr [eax+60]
  004025DC   . |8B55 EC       mov     edx, dword ptr [ebp-14]
  004025DF   . |0355 D4       add     edx, dword ptr [ebp-2C]
  004025E2   . |8A02          mov     al, byte ptr [edx]
  004025E4   . |32C1          xor     al, cl
  004025E6   . |8B4D EC       mov     ecx, dword ptr [ebp-14]
  004025E9   . |034D D4       add     ecx, dword ptr [ebp-2C]
  004025EC   . |8801          mov     byte ptr [ecx], al
  004025EE   . |8B55 E4       mov     edx, dword ptr [ebp-1C]
  004025F1   . |83EA 05       sub     edx, 5
  004025F4   . |8B45 EC       mov     eax, dword ptr [ebp-14]
  004025F7   . |0345 D4       add     eax, dword ptr [ebp-2C]
  004025FA   . |8A08          mov     cl, byte ptr [eax]
  004025FC   . |32CA          xor     cl, dl
  004025FE   . |8B55 EC       mov     edx, dword ptr [ebp-14]
  00402601   . |0355 D4       add     edx, dword ptr [ebp-2C]
  00402604   . |880A          mov     byte ptr [edx], cl
  00402606   .^\EB BD         jmp     short 004025C5
  这次分析是很弱智,老鸟表BS我啊,嘿嘿!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年01月28日 12:07:23

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
2
偶的处女作啊,大家讨论下吧
2009-1-28 16:33
0
雪    币: 277
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么是垃圾??
2009-1-28 18:46
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
没技术含量就是垃圾
2009-1-28 18:48
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
你看我的第1篇精华
简直是垃圾极品
垃圾弄成精华
化腐朽为神奇
2009-1-28 18:57
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
垃圾也是不错的垃圾!
2009-2-7 20:27
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
谢谢大家了啊
2009-2-12 13:29
0
雪    币: 234
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
写的挺好的啊 挺好的入门级分析作品
2009-2-13 13:12
0
游客
登录 | 注册 方可回帖
返回
//