首页
社区
课程
招聘
[旧帖] [求助]借鸡生蛋 0.00雪花
发表于: 2009-8-10 22:52 5985

[旧帖] [求助]借鸡生蛋 0.00雪花

2009-8-10 22:52
5985
前面发了一帖,被版主引用第17条锁帖警告。同样问题,现在换个方式问问看行不行。

某程序,无壳,可以正常运行。结构见图:

将代码段全部换成另一个长度相同的代码,PE头上入口也做了修正,但是无法运行,而且OD也无法加载,提示:

由于替换和被替换的程序在功能、资源几乎完全相同(核心算法有别),所以Import表应该不用修正,而且代码段替换未破坏资源。请问是什么地方出了问题,不能正常运行?

我曾经把区段内的代码一个个子程序地替换,在OD里是可以往下运行的,但运行到呼出主界面的时候,Find和Load resource都没有出错,而在DialogBoxIndirectParamAorW出出错。
00401922  |> \6A 00               push    0                                ; /lParam = NULL
00401924  |.  68 20164000         push    00401620                         ; |DlgProc = keygen_z.00401620
00401929  |.  6A 00               push    0                                ; |hOwner = NULL
0040192B  |.  6A 6B               push    6B                               ; |pTemplate = 6B
0040192D  |.  57                  push    edi                              ; |hInst
0040192E  |.  893D 40704100       mov     dword ptr [417040], edi          ; |
00401934  |.  FF15 6C314100       call    dword ptr [41316C]               ; \DialogBoxParamA


77D3B144 >  8BFF                  mov     edi, edi
77D3B146    55                    push    ebp
77D3B147    8BEC                  mov     ebp, esp
77D3B149    53                    push    ebx
77D3B14A    56                    push    esi
77D3B14B    8B75 08               mov     esi, dword ptr [ebp+8]
77D3B14E    6A 00                 push    0
77D3B150    FF75 0C               push    dword ptr [ebp+C]
77D3B153    83CB FF               or      ebx, FFFFFFFF
77D3B156    6A 05                 push    5
77D3B158    56                    push    esi
77D3B159    FF15 C414D777         call    dword ptr [77D714C4]             ; kernel32.FindResourceExA
77D3B15F    85C0                  test    eax, eax
77D3B161    74 40                 je      short 77D3B1A3
77D3B163    57                    push    edi
77D3B164    50                    push    eax
77D3B165    56                    push    esi
77D3B166    FF15 E412D777         call    dword ptr [77D712E4]             ; kernel32.LoadResource
77D3B16C    8BF8                  mov     edi, eax
77D3B16E    85FF                  test    edi, edi
77D3B170    74 30                 je      short 77D3B1A2
77D3B172    56                    push    esi
77D3B173    57                    push    edi
77D3B174    FF15 EC12D777         call    dword ptr [77D712EC]             ; USER32.77D18D06
77D3B17A    85C0                  test    eax, eax
77D3B17C    74 1C                 je      short 77D3B19A
77D3B17E    6A 02                 push    2
77D3B180    FF75 18               push    dword ptr [ebp+18]
77D3B183    FF75 14               push    dword ptr [ebp+14]
77D3B186    FF75 10               push    dword ptr [ebp+10]
77D3B189    50                    push    eax
77D3B18A    56                    push    esi
77D3B18B    E8 4098FEFF           call    DialogBoxIndirectParamAorW


小弟还未入门,请高手指点。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
push    00401620              ; |DlgProc = keygen_z.00401620

检查看看 401620 是不是 DlgProc
2009-8-10 23:06
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
检查过,是的,扫描鼠标、键盘事件的代码。
00401620   .  8B4424 08        mov     eax, dword ptr [esp+8]
00401624   .  83E8 10          sub     eax, 10                          ;  Switch (cases 10..111)
00401627   .  0F84 9D010000    je      004017CA
0040162D   .  2D 00010000      sub     eax, 100
00401632   .  56               push    esi
00401633   .  57               push    edi
00401634   .  0F84 EC000000    je      00401726
0040163A   .  83E8 01          sub     eax, 1
0040163D   .  75 58            jnz     short 00401697
0040163F   .  0FB74424 14      movzx   eax, word ptr [esp+14]           ;  Case 111 (WM_COMMAND) of switch 00401624
00401644   .  83E8 01          sub     eax, 1                           ;  Switch (cases 1..2)
00401647   .  74 1B            je      short 00401664
00401649   .  83E8 01          sub     eax, 1
0040164C   .  75 49            jnz     short 00401697
0040164E   .  50               push    eax                              ; /lParam; Case 2 of switch 00401644
0040164F   .  50               push    eax                              ; |wParam
00401650   .  8B4424 14        mov     eax, dword ptr [esp+14]          ; |
00401654   .  6A 10            push    10                               ; |Message = WM_CLOSE
00401656   .  50               push    eax                              ; |hWnd
00401657   .  FF15 70314100    call    dword ptr [413170]               ; \SendMessageA
0040165D   .  5F               pop     edi
0040165E   .  5E               pop     esi
0040165F   .  33C0             xor     eax, eax
00401661   .  C2 1000          retn    10

而且在401620上面下了断点,如果是修改前的版本用OD跟踪(另外一个地址)会发现载入主界面或重绘的时候这个断点在不停的中断,企图抓取所有的鼠标键盘事件。但修改后此断点还未运行到,就出错跳到ntdll里面了。
2009-8-10 23:14
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
Data Directory 列出来看看.
不然就直接放上你改过的 exe
2009-8-10 23:30
0
雪    币: 8209
活跃值: (4513)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
5
输入表有问题
你用lordpe看看ImportTable都是错的
2009-8-10 23:32
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
唐伯虎回问题真是直接果断
2009-8-10 23:42
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看过了,没错啊:




上附件:
keygen_zc-cr3.0.rar
上传的附件:
2009-8-10 23:47
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
唐伯虎说的是对的.
你再检查检查
2009-8-11 00:10
0
雪    币: 8209
活跃值: (4513)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
9
ThunkRVA都落入第一个区段了
而你又把第一个区段换掉了,所以就乱了
2009-8-11 09:42
0
雪    币: 2401
活跃值: (1402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
果然輸入表全錯了啊
2009-8-11 14:39
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还需要学习,搞定后结贴酬谢各位。
2009-8-12 00:51
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Rebuild PE
2009-8-12 15:38
0
雪    币: 33
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
13
~~接分~~
2009-8-12 16:00
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
请详细指点工具和步骤
2009-8-12 23:27
0
雪    币: 8209
活跃值: (4513)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
15
对于楼主这个程序,直接替换代码段可能是行不通的
当两个不同版本的代码段大小都不同的话,很多全局变量的偏移都错位了,不太可能简单修复
如果确实有足够时间修复这些偏移的话,那么输入表也是需要重新建立的
2009-8-13 09:32
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
先尝试用 Lord PE的重建PE功能重建一下看是否可正常运行,PEID的插件也带有这个功能
2009-8-13 10:34
0
游客
登录 | 注册 方可回帖
返回
//