能力值:
( LV9,RANK:850 )
|
-
-
2 楼
自己手动填入输入表rva: 3100 大小:54,
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
请问你是怎么得到这个数据的呢?
我到OEP后向下看,找到第一个API叫LoadCursorA,call 00401744.然后dd 00401744,但是我没有看到有API的函数表。
|
能力值:
( LV9,RANK:850 )
|
-
-
4 楼
你也看到7xxxxxxx之类的api函数地址,这些都是程序运行需要用的api,都已经导入pe了
call 401744,按回车看到是jmp dword ptr[xxxxxx] ,xxxxxx这里才是api函数地址指针,然后可以在内存里查看了,鼠标拖拉出表的位置大小,od下面有显示,再用REC修复就可以了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
非常感谢,学会了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
路过,我也学会了,谢谢大菜一号
|
能力值:
( LV7,RANK:110 )
|
-
-
7 楼
先用脱壳机脱壳。用OD载入后,按CTRL+N找到USER32.GetDlgItemTextA,回车进入后:
004013AF call <jmp.&USER32.GetDlgItemTextA>取注册码
00401539 call <jmp.&USER32.GetDlgItemTextA>取用户名
00401738 jmp dword ptr [<&USER32.GetDlgItemTe USER32.GetDlgItemTextA
在取用户名的地方下断,注意以下代码:
00401548 |> \BF BC020000 mov edi, 2BC
0040154D |. BE 30000000 mov esi, 30
00401552 |. B8 48000000 mov eax, 48
00401557 |. 99 cdq
00401558 |. F7FB idiv ebx ; 0x48 % user.len
0040155A |. 29C6 sub esi, eax ; 0x30-eax
0040155C |. 8D34B6 lea esi, dword ptr [esi+esi*4]
0040155F |. 29F7 sub edi, esi
00401561 |. 6BFF 6B imul edi, edi, 6B
00401564 |. 81EF 6CCF0000 sub edi, 0CF6C
0040156A |. 81FF 00230000 cmp edi, 2300
00401570 |. 7F 08 jg short 0040157A ; >J
00401572 |. 81FF 90010000 cmp edi, 190
00401578 |. 7D 04 jge short 0040157E ; >=J
这段代码是检测用户名长度的,用户长度为3~9位。
004014ED |. E8 D0FDFFFF call 004012C2
这里是关键代码。这个CM本身就是注册机,所以把call 004012C2翻译出来就可以写注册机了。
重点:
004013BC |. B8 CF110000 mov eax, 11CF
004013C1 |. 0FB68D E1FCFF>movzx ecx, byte ptr [ebp-31F] ; 注册码各位
004013C8 |. 99 cdq
004013C9 |. F7F9 idiv ecx ; eax/ecx
004013CB |. 83FA 17 cmp edx, 17
004013CE |. 74 07 je short 004013D7
这里是检测注册码第一位是否为‘6’。
还有就是后面有两个wsprintfA函数,要注意它的格式。
|
|
|