首页
社区
课程
招聘
[推荐]看到这个ReverseMe,感觉比较别致,大家看看
发表于: 2007-8-17 15:24 6511

[推荐]看到这个ReverseMe,感觉比较别致,大家看看

2007-8-17 15:24
6511
就是要去掉程序运行开始弹出的Nag窗口。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
能去掉这个Nag窗口的兄弟们,说一下你们的思路。
2007-8-17 16:25
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3


要做两上字节的补丁`` 向这样做了,再研究两个字节`
跳转表:

00401218   .- FF25 40204000 jmp     dword ptr [<&USER32.BeginPaint>] ;  USER32.BeginPaint
0040121E   .- FF25 24204000 jmp     dword ptr [<&USER32.CreateWindow>;  USER32.CreateWindowExA
00401224   .- FF25 28204000 jmp     dword ptr [<&USER32.DefWindowPro>;  USER32.DefWindowProcA
0040122A   $- FF25 20204000 jmp     dword ptr [<&USER32.DispatchMess>;  USER32.DispatchMessageA
00401230   .- FF25 0C204000 jmp     dword ptr [<&USER32.DrawTextA>]  ;  USER32.DrawTextA
00401236   .- FF25 10204000 jmp     dword ptr [<&USER32.EndPaint>]   ;  USER32.EndPaint
0040123C   .- FF25 14204000 jmp     dword ptr [<&USER32.GetClientRec>;  USER32.GetClientRect
00401242   $- FF25 18204000 jmp     dword ptr [<&USER32.GetMessageA>>;  USER32.GetMessageA
00401248   .- FF25 1C204000 jmp     dword ptr [<&USER32.LoadCursorA>>;  USER32.LoadCursorA
0040124E   .- FF25 44204000 jmp     dword ptr [<&USER32.LoadIconA>]  ;  USER32.LoadIconA
00401254    - FF25 48204000 jmp     dword ptr [<&USER32.MessageBoxA>>;  USER32.MessageBoxA   //这个死东西是nag,改了,jmp 00401266,直接ShowWindow   
0040125A   .- FF25 2C204000 jmp     dword ptr [<&USER32.PostQuitMess>;  USER32.PostQuitMessage
00401260   .- FF25 30204000 jmp     dword ptr [<&USER32.RegisterClas>;  USER32.RegisterClassExA
00401266   .- FF25 34204000 jmp     dword ptr [<&USER32.ShowWindow>] ;  USER32.ShowWindow
0040126C   $- FF25 38204000 jmp     dword ptr [<&USER32.TranslateMes>;  USER32.TranslateMessage
00401272   .- FF25 3C204000 jmp     dword ptr [<&USER32.UpdateWindow>;  USER32.UpdateWindow
00401278   >- FF25 04204000 jmp     dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess
0040127E   $- FF25 00204000 jmp     dword ptr [<&KERNEL32.GetModuleH>;  kernel32.GetModuleHandleA

再看看两个字节`
上传的附件:
2007-8-17 16:26
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
这东西跟vm有点像,跟P-code更像``
2007-8-17 16:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,Nag窗口已经有了提示,欢迎大家前来学习、探讨,共同进步。

楼上的高手已经爆破了,但还没有Reverse,欢迎大家来。

声明一下,这不是jvm,也不是p-code

第一次看到这样的ReverseMe,感觉还是比较强的,所以让大家观摩观摩,最后我会放出这个ReverseMe的出处,有非常详细的Reverse过程说明的。

小弟入行不足半月,还恳请大牛们指点。
2007-8-17 16:46
0
雪    币: 239
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
MessageBoxA断下后会出现有趣现象
2007-8-17 16:53
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,新手学习~
~
帮你放出处~~
Lena's Tutorial #18
Diversion code, encryption/decryption, selfmodifying code and polymorphism

http://www.tuts4you.com/download.php?list.17

http://forums.accessroot.com/index.php?showtopic=2582&hl=lena
2007-8-17 17:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
无语,大家看出处好了。
2007-8-17 17:14
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
9
Oh no `
This is a English Page
2007-8-17 17:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
本来我想把这个系列的教程都给它翻译成中文的,但一怕没有太多时间,二怕自己刚刚入行不久,对有些专业术语把握不好,迟迟没有动手。有没有志同道合者,一起为社区的新人做点贡献???
2007-8-17 17:22
0
雪    币: 260
活跃值: (102)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
太难,想看答案,不过点了好像要注册才能看,还是自己动手吧!
用Od载入停在这里:
    00401288 > $  6A 00         push    0
    0040128A      E8            db      E8
    0040128B      EF            db      EF
    0040128C      FF            db      FF
    0040128D      FF            db      FF
    0040128E      FF            db      FF
    0040128F      A3            db      A3
    00401290      30314000      dd      ReverseM.00403130
    00401294      BF 11104000   mov     edi, 00401011                      ;  入口地址
    00401299   .  E8 71000000   call    0040130F        ;  跟进
    0040129E      E8 6EFDFFFF   call    00401011

可以发现此处是对00401000地址内容的异或解密(第一次解密)
    0040130F  /$  B8 00104000   mov     eax, 00401000           ;  解密起始地址
    00401314  |>  8030 5A       xor     byte ptr [eax], 5A           ;  异或解密
    00401317  |.  40            inc     eax
    00401318  |.  3D 18124000   cmp     eax, <jmp.&USER32.BeginPaint>      ;  入口地址
    0040131D  |.^ 7C F5         jl      short 00401314
    0040131F  \.  C3            retn          ;  返回到0040129E

    0040129E处的call,跟进,此处是第二次变相解密
    00401011   $  33C0          xor     eax, eax                           ; 
    00401013   .  66:C707 6A00  mov     word ptr [edi], 6A                 ; edi指向地址401011,此处是变相解密,将00401011至00401024处的内容改写
    00401018   .  83C7 02       add     edi, 2                  
    0040101B   ?  C707 687D3040 mov     dword ptr [edi], 40307D68    ; 
    00401021      83C7 04       add     edi, 4
    00401024   .  C607 00       mov     byte ptr [edi], 0
    00401027   .  47            inc     edi
    00401028   .  C707 68343040 mov     dword ptr [edi], 40303468
    0040102E   .  83C7 04       add     edi, 4
    00401031   .  C607 00       mov     byte ptr [edi], 0
    00401034   .  47            inc     edi
    00401035   .  66:C707 6A00  mov     word ptr [edi], 6A
    0040103A   .  83C7 02       add     edi, 2
    0040103D   .  C707 E8300200 mov     dword ptr [edi], 230E8
    00401043   .  83C7 04       add     edi, 4
    00401046   .  C607 00       mov     byte ptr [edi], 0
    00401049   .  47            inc     edi
    0040104A   .  66:C707 EB44  mov     word ptr [edi], 44EB
    0040104F   .  83EF 24       sub     edi, 24        ;edi指向00401000
    00401052   .  FFD7          call    edi          ; call 00401000
    00401054   .  E8 C7020000   call    00401320
    00401059   .  E8 64020000   call    004012C2
    0040105E   .  EB 15         jmp     short 00401075

跟进00401000,很明显第三次解密
    00401000   > /B8 00304000   mov     eax, 00403000
    00401005   > |8030 B3       xor     byte ptr [eax], 0B3      ; 又一个解密,从地址可知是对字符串解密
    00401008   . |40            inc     eax          
    00401009   . |3D 28314000   cmp     eax, 00403128
    0040100E   .^|7C F5         jl      short 00401005
    00401010   . |40            inc     eax
    00401011   $ |6A 00         push    0                                 ; /Style = MB_OK|MB_APPLMODAL
    00401013   . |68 7D304000   push    0040307D                           ; 
    00401018   . |68 34304000   push    00403034                           ; 
    0040101D   . |6A 00         push    0                                 ; |hOwner = NULL
    0040101F     |E8 30020000   call    <jmp.&USER32.MessageBoxA>    ; 不用说了,就是得把这个搞掉
    00401024   . |EB 44         jmp     short 0040106A      ; 

反复跟了几遍才发现这是个自修改的ReverseMe,有几次解密,相当麻烦,开始太急躁,修改了四个字节绕过了MessageBox,但是显示的字符串是乱码,后来耐着性子,才发现第三次解密是对字符串的解密。看来只能按要求做2个字节的补丁了。我想了半天,只有对0040101F处调用MessageBoxA进行处理,让他直接调用00401024处的jmp,这样就不会有MessageBox了。
因为这个ReverseMe有几处解密,0040101F先是由第一次使用异或解密,然后又通过第二次变相解密修改了0040101F处的内容,所以我们主要是对第二次解密的内容进行处理,也就是下边这一句:
    0040103D   .  C707 E8300200 mov     dword ptr [edi], 230E8
其中的E8就是CALL的机器码,要直接CALL当前指令的下一条语句直接用CALL 0就可以了,所以我们只要将上一条语句修改成
mov     dword ptr [edi], 000E8
就可以了。这样很容易找到内存地址从0401040开始,修改两个字节,要使其经过与5A异或解密后为0,就将这两个字节修改成5A 5A就可以了。
上传的附件:
2007-8-17 20:12
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
嗯嗯~我在努力滴学习。。高手幸苦啦!
2007-8-17 21:28
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
13
``我也没看了
动态解码
2007-8-18 11:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ToT
14
两次动态解码,第一次是进行xor 5a的抑或,这里涉及到了第二次的跳转码,只要最后将401011处改成EB11即可,因此改401016处改成B14B即可
2007-8-22 22:37
0
游客
登录 | 注册 方可回帖
返回
//