首页
社区
课程
招聘
菜鸟请教一段简单的算法
发表于: 2005-7-16 01:33 4519

菜鸟请教一段简单的算法

2005-7-16 01:33
4519
00404ECC    53              push ebx                  
00404ECD    56              push esi
00404ECE    57              push edi
00404ECF    89C6            mov esi,eax
00404ED1    89D7            mov edi,edx
00404ED3    39D0            cmp eax,edx
00404ED5    0F84 8F000000   je unpacked.00404F6A
00404EDB    85F6            test esi,esi
00404EDD    74 68           je short unpacked.00404F47
00404EDF    85FF            test edi,edi
00404EE1    74 6B           je short unpacked.00404F4E
00404EE3    8B46 FC         mov eax,dword ptr ds:[esi-4]
00404EE6    8B57 FC         mov edx,dword ptr ds:[edi-4]
00404EE9    29D0            sub eax,edx
00404EEB    77 02           ja short unpacked.00404EEF
00404EED    01C2            add edx,eax
00404EEF    52              push edx
00404EF0    C1EA 02         shr edx,2
00404EF3    74 26           je short unpacked.00404F1B
00404EF5    8B0E            mov ecx,dword ptr ds:[esi]
00404EF7    8B1F            mov ebx,dword ptr ds:[edi]
00404EF9    39D9            cmp ecx,ebx
00404EFB    75 58           jnz short unpacked.00404F55
00404EFD    4A              dec edx
00404EFE    74 15           je short unpacked.00404F15
00404F00    8B4E 04         mov ecx,dword ptr ds:[esi+4]
00404F03    8B5F 04         mov ebx,dword ptr ds:[edi+4]
00404F06    39D9            cmp ecx,ebx
00404F08    75 4B           jnz short unpacked.00404F55
00404F0A    83C6 08         add esi,8
00404F0D    83C7 08         add edi,8
00404F10    4A              dec edx
00404F11  ^ 75 E2           jnz short unpacked.00404EF5
00404F13    EB 06           jmp short unpacked.00404F1B
00404F15    83C6 04         add esi,4
00404F18    83C7 04         add edi,4
00404F1B    5A              pop edx
00404F1C    83E2 03         and edx,3
00404F1F    74 22           je short unpacked.00404F43
00404F21    8B0E            mov ecx,dword ptr ds:[esi]
00404F23    8B1F            mov ebx,dword ptr ds:[edi]
00404F25    38D9            cmp cl,bl
00404F27    75 41           jnz short unpacked.00404F6A
00404F29    4A              dec edx
00404F2A    74 17           je short unpacked.00404F43
00404F2C    38FD            cmp ch,bh
00404F2E    75 3A           jnz short unpacked.00404F6A
00404F30    4A              dec edx
00404F31    74 10           je short unpacked.00404F43
00404F33    81E3 0000FF00   and ebx,0FF0000
00404F39    81E1 0000FF00   and ecx,0FF0000
00404F3F    39D9            cmp ecx,ebx
00404F41    75 27           jnz short unpacked.00404F6A
00404F43    01C0            add eax,eax
00404F45    EB 23           jmp short unpacked.00404F6A
00404F47    8B57 FC         mov edx,dword ptr ds:[edi-4]
00404F4A    29D0            sub eax,edx
00404F4C    EB 1C           jmp short unpacked.00404F6A
00404F4E    8B46 FC         mov eax,dword ptr ds:[esi-4]
00404F51    29D0            sub eax,edx
00404F53    EB 15           jmp short unpacked.00404F6A
00404F55    5A              pop edx
00404F56    38D9            cmp cl,bl
00404F58    75 10           jnz short unpacked.00404F6A
00404F5A    38FD            cmp ch,bh
00404F5C    75 0C           jnz short unpacked.00404F6A
00404F5E    C1E9 10         shr ecx,10
00404F61    C1EB 10         shr ebx,10
00404F64    38D9            cmp cl,bl
00404F66    75 02           jnz short unpacked.00404F6A
00404F68    38FD            cmp ch,bh
00404F6A    5F              pop edi
00404F6B    5E              pop esi
00404F6C    5B              pop ebx
00404F6D    C3              retn

哪位大虾能解释一下这段算法(最好能细一些)
兄弟先在这里谢过了!~~~

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
你这样写出来恐怕没人能知道(我是菜鸟),最好给出该软件的链接。
2005-7-16 16:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
http://www.mhua.com/codemaker/

asp 2.12壳,脱掉后经过经过跟踪发现call 00404ECC是注册验证的关键call
跟到00404ECC就得到这段代码
爆破没问题,但是想学算法,这个比较简单一些,对我这样的新手来说,这个学起来可能更简单些,希望哪位大虾解释一下。
2005-7-17 00:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mwd
4
学简单的算法不是很难!首先你应该理解基本的汇编指令~!
上面的那些指令如果看不明白~!建议还是先学习一下汇编语言~!
这是最基本的~!
2005-7-17 01:21
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
5
找个汇编教程,根据教程里介绍的指令的意思,一句一句的看代码,在OLLYDBG动态调试,看输入内容的变化,反复研究。
2005-7-17 09:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
打算自己看书去了
之前顶一下
2005-7-18 11:06
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
唉!汇编的功力不够,看起来还是很吃力;
2005-7-18 12:03
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
略略的看了一下,这一段程序应该不是注册码的关键算法Call,看起来更像是一个验正注册码对错的Call(问一下,这个程序是用Delphi写的吗)
2005-7-18 15:21
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
00404ECC    53              push ebx                  
00404ECD    56              push esi
00404ECE    57              push edi
00404ECF    89C6            mov esi,eax
00404ED1    89D7            mov edi,edx
//测试EAX和EDX是否相等,若相等则退出Call
00404ED3    39D0            cmp eax,edx
00404ED5    0F84 8F000000   je unpacked.00404F6A
//测试ESI是否为空,为空则退出Call
00404EDB    85F6            test esi,esi
00404EDD    74 68           je short unpacked.00404F47
//测试EDI是否为空,为空则退出Call
00404EDF    85FF            test edi,edi
00404EE1    74 6B           je short unpacked.00404F4E
//取ESI-4和EDI-4的内存数据到EAX和EDX(取什么?不知道,你没告诉我那里有什么东西)。
00404EE3    8B46 FC         mov eax,dword ptr ds:[esi-4]
00404EE6    8B57 FC         mov edx,dword ptr ds:[edi-4]
//EAX减去EDX,EAX若不为0则EDX加上EAX的值。
00404EE9    29D0            sub eax,edx
00404EEB    77 02           ja short unpacked.00404EEF
00404EED    01C2            add edx,eax
//保存EDX的值
00404EEF    52              push edx
//EDX除于4,若EDX等于0,则跳出下面的运算到00404F1B继续运行。
00404EF0    C1EA 02         shr edx,2
00404EF3    74 26           je short unpacked.00404F1B
//取ESI和EDI的值到ECX和EDX,并比较两数的值,若不相等就跳到00404F55处继续比较Cl/Dl和CH/DH的值是否相等,不等就退出Call
00404EF5    8B0E            mov ecx,dword ptr ds:[esi]
00404EF7    8B1F            mov ebx,dword ptr ds:[edi]
00404EF9    39D9            cmp ecx,ebx
00404EFB    75 58           jnz short unpacked.00404F55
//EDX减1,若EDX为零则跳到404F15处继续运行。
00404EFD    4A              dec edx
00404EFE    74 15           je short unpacked.00404F15
//取ESI+4和EDI+4的值到ECX和EBX中,并比较两数的值,若不相等就跳到00404F55处继续比较Cl/Dl和CH/DH的值是否相等,不等就退出Call
00404F00    8B4E 04         mov ecx,dword ptr ds:[esi+4]
00404F03    8B5F 04         mov ebx,dword ptr ds:[edi+4]
00404F06    39D9            cmp ecx,ebx
00404F08    75 4B           jnz short unpacked.00404F55
//ESI和EDI指令加8,EDX减1,若EDX不为零,跳到00404EF%处继续循环比较。若为零则退出循环。
00404F0A    83C6 08         add esi,8
00404F0D    83C7 08         add edi,8
00404F10    4A              dec edx
00404F11  ^ 75 E2           jnz short unpacked.00404EF5
00404F13    EB 06           jmp short unpacked.00404F1B
//ESI和EDI指针加4,并恢复EDX的原值。
00404F15    83C6 04         add esi,4
00404F18    83C7 04         add edi,4
00404F1B    5A              pop edx
//EDX与3,若EDX等于0则退出Call
00404F1C    83E2 03         and edx,3
00404F1F    74 22           je short unpacked.00404F43
//取ESI和EDI指向的值到ECX和EDX,并比较CL和BL的值是否相等,不等就退出Call
00404F21    8B0E            mov ecx,dword ptr ds:[esi]
00404F23    8B1F            mov ebx,dword ptr ds:[edi]
00404F25    38D9            cmp cl,bl
00404F27    75 41           jnz short unpacked.00404F6A
//EDX减1,EDX为零则退出Call
00404F29    4A              dec edx
00404F2A    74 17           je short unpacked.00404F43
//比较CH和BH的值,不等就退出Call
00404F2C    38FD            cmp ch,bh
00404F2E    75 3A           jnz short unpacked.00404F6A
//EDX减1,EDX为零就退出Call
00404F30    4A              dec edx
00404F31    74 10           je short unpacked.00404F43
//取EBX和ECX的高位值,并比较,不等就退出Call
00404F33    81E3 0000FF00   and ebx,0FF0000
00404F39    81E1 0000FF00   and ecx,0FF0000
00404F3F    39D9            cmp ecx,ebx
00404F41    75 27           jnz short unpacked.00404F6A
//下面几句没什么好说的,是程序设置返回值而已。并退出Call
00404F43    01C0            add eax,eax
00404F45    EB 23           jmp short unpacked.00404F6A
00404F47    8B57 FC         mov edx,dword ptr ds:[edi-4]
00404F4A    29D0            sub eax,edx
00404F4C    EB 1C           jmp short unpacked.00404F6A
00404F4E    8B46 FC         mov eax,dword ptr ds:[esi-4]
00404F51    29D0            sub eax,edx
00404F53    EB 15           jmp short unpacked.00404F6A
00404F55    5A              pop edx
//这下面几句是上面00404EF5开始若ECX和EBX的值不等时跳到这里比较CL/BL、CH/BH以及ECX和EBX的高位值是否相等。并退出Call
00404F56    38D9            cmp cl,bl
00404F58    75 10           jnz short unpacked.00404F6A
00404F5A    38FD            cmp ch,bh
00404F5C    75 0C           jnz short unpacked.00404F6A
00404F5E    C1E9 10         shr ecx,10
00404F61    C1EB 10         shr ebx,10
00404F64    38D9            cmp cl,bl
00404F66    75 02           jnz short unpacked.00404F6A
00404F68    38FD            cmp ch,bh
00404F6A    5F              pop edi
00404F6B    5E              pop esi
00404F6C    5B              pop ebx
00404F6D    C3              retn
2005-7-18 15:51
0
雪    币: 3971
活跃值: (2222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
小虾大侠写的详细!
2005-7-19 21:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
水平不够,找的还真不是注册码计算的call
程序是用dephi写的

太谢谢小虾了~~~
2005-7-22 13:23
0
雪    币: 547
活跃值: (2200)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
是虾就厉害
2005-7-23 16:25
0
游客
登录 | 注册 方可回帖
返回
//