能力值:
( LV6,RANK:90 )
26 楼
在00613503 RETN这句执行后就到达啦oep,
不知道你用什么平台,我的直接可以运行,你也可以试下用aspackide 1.41
好象是这个工具,应该没有问题的.
能力值:
( LV2,RANK:10 )
27 楼
很感谢楼主这么快就回复.这里直接跳到了004015cc,用OD脱壳后不能用,重建输入表选1或选2都不行,我的是XPSP2系统,用你说的那个工具也不行.不知你是在哪个系统下运行的.
能力值:
( LV6,RANK:90 )
28 楼
我把我脱的上传啦,看在你那里可以运行不?我的是xp1
你那里如果不能运行,你可以跟踪脱壳和没有脱壳的,看是哪一步出啦问题,比较一下,有可能可以修复.
上传的附件:
能力值:
( LV2,RANK:10 )
29 楼
谢了,可以运行的,但我还是不知道什么地方出的问题,oep应该是对的,不知你这个是用什么工具脱的,脱了后要修复不??再一次感谢楼主了.我先踪一下算法吧.但我还是想真的想把这个问题搞清楚,多帮帮忙了.
能力值:
( LV2,RANK:10 )
30 楼
向这种刻苦的搂住学习
能力值:
( LV2,RANK:10 )
31 楼
壳脱了,但是是用Ctrl+G 输入004015cc直接跳到入口,用OD的插件脱壳后就能用,跳到这里的代码为:
004015CC BA ECABF328 mov edx,28F3ABEC
004015D1 8B27 mov esp,dword ptr ds:[edi]
004015D3 2886 28184F8E sub byte ptr ds:[esi+8E4F1828],al
004015D9 0D E05C4EA8 or eax,A84E5CE0
004015DE ^ 77 B0 ja short Pic2Ico.00401590
004015E0 B2 3B mov dl,3B
004015E2 ^ E2 FD loopd short Pic2Ico.004015E1
004015E4 23D0 and edx,eax
004015E6 3960 18 cmp dword ptr ds:[eax+18],esp
004015E9 626C52 2F bound ebp,qword ptr ds:[edx+edx*2+>
004015ED 41 inc ecx
004015EE ED in eax,dx
004015EF DAF7 fidiv edi ; 非法使用寄存器
004015F1 ^ 7D DA jge short Pic2Ico.004015CD
004015F3 A2 6394DD6D mov byte ptr ds:[6DDD9463],al
004015F8 1071 79 adc byte ptr ds:[ecx+79],dh
004015FB ^ 78 84 js short Pic2Ico.00401581
004015FD 0941 0A or dword ptr ds:[ecx+A],eax
00401600 8F ??? ; 未知命令
00401601 97 xchg eax,edi
00401602 82E1 FE and cl,FFFFFFFE
00401605 CA 9615 retf 1596
00401608 3F aas
00401609 A0 9F505E8E mov al,byte ptr ds:[8E5E509F]
0040160E 7F 32 jg short Pic2Ico.00401642
00401610 65:B9 442DCBD>mov ecx,DACB2D44
00401616 57 push edi
00401617 55 push ebp
但如果从00613503跳过来之后代码就变为:
004015CC /EB 10 jmp short Pic2Ico.004015DE
004015CE |66:623A bound di,dword ptr ds:[edx]
004015D1 |43 inc ebx
004015D2 |2B2B sub ebp,dword ptr ds:[ebx]
004015D4 |48 dec eax
004015D5 |4F dec edi
004015D6 |4F dec edi
004015D7 |4B dec ebx
004015D8 |90 nop
004015D9 -|E9 98E05000 jmp 0090F676
004015DE \A1 8BE05000 mov eax,dword ptr ds:[50E08B]
004015E3 C1E0 02 shl eax,2
004015E6 A3 8FE05000 mov dword ptr ds:[50E08F],eax
004015EB 52 push edx
004015EC 6A 00 push 0
004015EE E8 1BB71000 call Pic2Ico.0050CD0E ; jmp to kernel32.GetModuleHandleA
004015F3 8BD0 mov edx,eax
004015F5 E8 52690E00 call Pic2Ico.004E7F4C
004015FA 5A pop edx
004015FB E8 B0680E00 call Pic2Ico.004E7EB0
00401600 E8 87690E00 call Pic2Ico.004E7F8C
00401605 6A 00 push 0
00401607 E8 147E0E00 call Pic2Ico.004E9420
0040160C 59 pop ecx
0040160D 68 34E05000 push Pic2Ico.0050E034
00401612 6A 00 push 0
00401614 E8 F5B61000 call Pic2Ico.0050CD0E ; jmp to kernel32.GetModuleHandleA
同样在004015cc处脱壳就不能用.我不知道什么原因,不知各位朋友在练习的时候遇到这个问题没有,或者有谁能看出是什么问题的请指点一下,好吗?
能力值:
(RANK:10 )
32 楼
写的很详细,值得学习,谢谢
能力值:
( LV6,RANK:90 )
33 楼
最初由 dongfeng 发布 壳脱了,但是是用Ctrl+G 输入004015cc直接跳到入口,用OD的插件脱壳后就能用,跳到这里的代码为: 004015CC BA ECABF328 mov edx,28F3ABEC 004015D1 8B27 mov esp,dword ptr ds:[edi] 004015D3 2886 28184F8E sub byte ptr ds:[esi+8E4F1828],al 004015D9 0D E05C4EA8 or eax,A84E5CE0 ........
要在壳解压缩后dump才能脱,你直接到004015cc,壳并没有解压,相当与你抓的一部分是壳,一部分是压缩的程序代码,所以不能用.这是我理解的,不知道对不.
能力值:
( LV2,RANK:10 )
34 楼
我用Aspackdie1.41自动脱壳了.但,用OD打开并查找"your registration code is invalid"时,找不到!
闷啊.
能力值:
( LV2,RANK:10 )
35 楼
楼主的努力大家是看得到的,加油!
能力值:
( LV2,RANK:10 )
36 楼
最初由 sbright 发布 要在壳解压缩后dump才能脱,你直接到004015cc,壳并没有解压,相当与你抓的一部分是壳,一部分是压缩的程序代码,所以不能用.这是我理解的,不知道对不.
可能是没看懂我的问题,我现在是直接跳到出口,脱壳就能用.而解压后反而不能用,郁闷啊.
我看了一下算法:
0042126C |. 52 |PUSH EDX
0042126D |. E8 26010000 |CALL bbb2.00421398 这个call将EDX给EAX; ; \bbb2.00421398
00421272 |. 59 |POP ECX
00421273 |. B9 1A000000 |MOV ECX,1A
00421278 |. 99 |CDQ
00421279 |. F7F9 |IDIV ECX
0042127B |. 83C2 41 |ADD EDX,41 这一段象个伪随机数的反汇编,因为我在rjjj的crackme里面看到过这个。
这里我并不认为是什么伪随机数,因为0042127B这句的EDX是上一个EDX(也就是0042126C这句的EDX)除以1A的余数.我其实也很菜,也不知道是怎么算出来的,但我每次检验都是对的.
能力值:
( LV6,RANK:90 )
37 楼
脱壳就能用.而解压后反而不能用????
脱壳的过程就是让代码在内存中解压吧解压后再把代码dump出来.
不知道你所说的解压是什么意思?
确实不是随机数的反汇编,
这是riijj大哥的简单crackme
http://bbs.pediy.com/upload/files/1084801702.zip
这是代码
int checkkey()
{
char buf1[16];
char buf2[16];
char space[16];
unsigned long i, deta = 0;
char x;
long j = 0;
if(GetDlgItemText(hDialog, IDC_EDIT1, buf1, 16) < 3)
{
return 1;
}
GetDlgItemText(hDialog, IDC_EDIT2, buf2, 16);
srand(UINT_MAX / (1+(buf1[0] % buf1[1] * buf1[2])));
for(i=0;i<15;i++)
{
space[i] = 65 + (int)(rand() % 26);
}
for(i=0;i<strlen(buf1);i++)
{
x = buf1[i];
x = x >> 5;
for(j=0; j<x*123; j++)
rand();
space[i] = 65 + (int)(rand() % 26);
deta = deta + abs(space[i] - buf2[i]);
}
那句相当与space[i] = 65 + (int)(XXX % 26);这句
除法一般是EAX放被除数余数放edx,
sorry
能力值:
( LV2,RANK:10 )
38 楼
我所说的也就是让代码在内存中解压,也就是我们说的单步跟踪.谢谢你给出代码.
就我所看到的汇编教程中并不是把把被除数放在EAX中,而是把被除数的高位放在EAX中,被除数的低位放在EDX中,作除后,商又放在EAX中,余数放在EDX中.所以我就没搞明白这里是怎么算出来的.
能力值:
( LV2,RANK:10 )
39 楼
谢谢楼主,菜鸟喜欢看的文章,有你的指点我们会进步快一些
能力值:
( LV6,RANK:90 )
40 楼
最初由 dongfeng 发布 我所说的也就是让代码在内存中解压,也就是我们说的单步跟踪.谢谢你给出代码. 就我所看到的汇编教程中并不是把把被除数放在EAX中,而是把被除数的高位放在EAX中,被除数的低位放在EDX中,作除后,商又放在EAX中,余数放在EDX中.所以我就没搞明白这里是怎么算出来的.
这里没有这样做,eax有32位,一般来说比较大啦,不知道long int 和short int 是多少位.也有可能是64位的数,所以用EAX和edx,你可以用高级语言试下
定义个四字的变量和双字的变量已及字变量做除法,然后反汇编试下?不懂..
不过这个暂时我也不会也不去弄懂它,有需要的时候再尝试去探索...
不懂的东西太多啦,只学自己感兴趣的..
能力值:
( LV2,RANK:10 )
41 楼
看过 学习中 对汇编的学习应该加强
能力值:
( LV2,RANK:10 )
42 楼
很精彩,呵呵。
能力值:
( LV2,RANK:10 )
43 楼
呵呵,不错耶,照着看容易学.
能力值:
( LV2,RANK:10 )
44 楼
支持一下
很详细,适合菜鸟看,学习中!
能力值:
( LV2,RANK:10 )
45 楼
写出注册机就完美了
已经很厉害了
能力值:
( LV2,RANK:10 )
46 楼
最初由 sbright 发布 【文章标题】: 菜鸟死追注册码(详细版,求精华) 【文章作者】: sbright 【作者邮箱】: 516824959 【作者主页】: www.qq.com 【作者QQ号】: 516824959 ........ 看不懂啊
能力值:
( LV2,RANK:10 )
47 楼
我是菜鸟,看了有些启发,学到了点东西。
谢谢楼主的文章。