能力值:
( LV6,RANK:90 )
|
-
-
2 楼
好可爱的算法(UnpackMe):
00401380 /$ 8B4424 08 mov eax, dword ptr ss:[esp+8]
00401384 |. 8A5424 04 mov dl, byte ptr ss:[esp+4]
00401388 |. 8A88 C0B04200 mov cl, byte ptr ds:[eax+42B0C0]
0040138E |. 33C0 xor eax, eax
00401390 |. 80F1 44 xor cl, 44
00401393 |. FEC9 dec cl
00401395 |. 3AD1 cmp dl, cl
00401397 |. 0F94C0 sete al
0040139A \. C3 retn
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
报毒,不试了!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
UnpackMe
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
还差点工夫…………
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
[QUOTE=CuteSnail;623932]好可爱的算法(UnpackMe):
00401380 /$ 8B4424 08 mov eax, dword ptr ss:[esp+8]
00401384 |. 8A5424 04 mov dl, byte ptr ss:[esp+4]
0...[/QUOTE]
004013A0 . 51 push ecx
004013A1 . 53 push ebx
004013A2 . 56 push esi
004013A3 . 57 push edi
004013A4 . 8BF1 mov esi, ecx
004013A6 6A 01 push 1
004013A8 . E8 31860100 call 004199DE
004013AD . 8B46 5C mov eax, dword ptr [esi+5C]
004013B0 . BB 01000000 mov ebx, 1
004013B5 . 8378 F8 08 cmp dword ptr [eax-8], 8
004013B9 . 74 02 je short 004013BD
004013BB . 33DB xor ebx, ebx
004013BD > 33FF xor edi, edi
004013BF > 85DB test ebx, ebx
004013C1 . 74 07 je short 004013CA
004013C3 . B8 08000000 mov eax, 8
004013C8 . EB 06 jmp short 004013D0
004013CA > 8B4E 5C mov ecx, dword ptr [esi+5C]
004013CD . 8B41 F8 mov eax, dword ptr [ecx-8]
004013D0 > 3BF8 cmp edi, eax ; ZF=0 //EDI=0x0,EAX=0x8
004013D2 7D 1F jge short 004013F3 ; 大于等于则跳,只要计算出edi>=eax就OK
004013D4 . 8B56 5C mov edx, dword ptr [esi+5C]
004013D7 . 57 push edi
004013D8 . 8A0417 mov al, byte ptr [edi+edx]
004013DB . 884424 10 mov byte ptr [esp+10], al
004013DF . 8B4C24 10 mov ecx, dword ptr [esp+10]
004013E3 . 51 push ecx
004013E4 . E8 97FFFFFF call 00401380 ;到大侠贴出来的代码
004013E9 . 83C4 08 add esp, 8 ; 在栈中抛去空闲空间,大小为8字节(如EAX为双字,4字节)
004013EC . 85C0 test eax, eax
004013EE 74 1F je short 0040140F
004013F0 . 47 inc edi
004013F1 .^ EB CC jmp short 004013BF
004013F3 > 85DB test ebx, ebx
004013F5 . 74 18 je short 0040140F
004013F7 . 6A 00 push 0
004013F9 . 68 F8B04200 push 0042B0F8 ; ok
004013FE . 68 E0B04200 push 0042B0E0 ; 恭喜! 你所填的即为key!
00401403 . 8BCE mov ecx, esi
00401405 . E8 787E0100 call 00419282
0040140A . 5F pop edi
0040140B . 5E pop esi
0040140C . 5B pop ebx
0040140D . 59 pop ecx
0040140E . C3 retn
0040140F > 6A 00 push 0
00401411 . 68 D8B04200 push 0042B0D8 ; error
00401416 . 68 CCB04200 push 0042B0CC ; key不正确!
0040141B . 8BCE mov ecx, esi
0040141D . E8 607E0100 call 00419282
00401422 . 5F pop edi
00401423 . 5E pop esi
00401424 . 5B pop ebx
00401425 . 59 pop ecx
00401426 . C3 retn
我咋感觉跟你说的这个算法没啥关系呀。。。。。。。。。。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
int a[]={0x12,0x2B,0x35,0x26,0x20,0x28,0x0A,0x22};
int tmp[MAXBYTE];
for (int i=0;i<8;i++)
{
tmp[i]=a[i]^0x44;
tmp[i]-=1;
}
for (i=0;i<8;i++)
{
printf("%c",tmp[i]);
}
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
004013A0 /. 51 PUSH ECX ; 保存ECX
004013A1 |. 53 PUSH EBX ; 保存EBX
004013A2 |. 56 PUSH ESI ; 保存ESI
004013A3 |. 57 PUSH EDI ; 保存EDI
004013A4 |. 8BF1 MOV ESI,ECX ; 将ECX内容赋值给ESI
004013A6 |. 6A 01 PUSH 1 ; 参数1 压栈
004013A8 |. E8 31860100 CALL 004199DE ; 取到编辑框注册码信息
004013AD |. 8B46 5C MOV EAX,[ESI+5C] ; 将ESI+5C地址单元内容给EAX ,实际是指向注册码字符串首地址
004013B0 |. BB 01000000 MOV EBX,1 ; EBX赋值为1
004013B5 |. 8378 F8 08 CMP DWORD PTR [EAX-8],8 ; 注册码长度与8比较
004013B9 |. 74 02 JE SHORT 004013BD ; 等于则跳转到004013BD
004013BB |. 33DB XOR EBX,EBX ; EBX清零
004013BD |> 33FF XOR EDI,EDI ; EDI清零
004013BF |> 85DB /TEST EBX,EBX ; 测试EBX是否为0
004013C1 |. 74 07 |JE SHORT 004013CA ; 等于0 则跳到004013CA
004013C3 |. B8 08000000 |MOV EAX,8 ; 将8赋值给EAX
004013C8 |. EB 06 |JMP SHORT 004013D0 ; 无条件跳到001013D0处
004013CA |> 8B4E 5C |MOV ECX,[ESI+5C] ; 将注册码首地址复制给ECX
004013CD |. 8B41 F8 |MOV EAX,[ECX-8] ; 将注册码长度给EAX
004013D0 |> 3BF8 |CMP EDI,EAX ; EDI与EAX比较
004013D2 |. 7D 1F |JGE SHORT 004013F3 ; 大于等于则跳004013F3
004013D4 |. 8B56 5C |MOV EDX,[ESI+5C] ; 将注册码首地址赋值给EDX
004013D7 |. 57 |PUSH EDI ; EDI压栈
004013D8 |. 8A0417 |MOV AL,[EDI+EDX] ; 注册码首地址EDX+EDI为偏移地址处字符给AL
004013DB |. 884424 10 |MOV [ESP+10],AL ; 将字符给ESP+10
004013DF |. 8B4C24 10 |MOV ECX,[ESP+10] ; 字符给ECX
004013E3 |. 51 |PUSH ECX ; ECX压栈
004013E4 |. E8 97FFFFFF |CALL 00401380 ; 调模块 00401380(这里做运算比较)
-----------------------------------------------------------------------------------------------------------
00401380 模块功能:
00401380 /$ 8B4424 08 MOV EAX,[ESP+8] ; ESP+8 地址单元内容给EAX,实际上时上面EDI的值,偏移量(计数器)
00401384 |. 8A5424 04 MOV DL,[ESP+4] ; esp+4地址单元BYTE内容给DL,实际上时上面传入的字符
00401388 |. 8A88 C0B04200 MOV CL,[EAX+42B0C0] ; 将42B0C0地址处偏移为EAX地址单元的BYTE给CL,注意这里是数组 12 2B 35 26 20 28 0A 22 +5& (."
0040138E |. 33C0 XOR EAX,EAX ; EAX清零
00401390 |. 80F1 44 XOR CL,44 ; CL 异或44
00401393 |. FEC9 DEC CL ; CL减1
00401395 |. 3AD1 CMP DL,CL ; 比较DL和CL
00401397 |. 0F94C0 SETE AL ; 相等则AL =1
------------------------------------------------------------------------------------------------------------
004013E9 |. 83C4 08 |ADD ESP,8 ; 栈平衡
004013EC |. 85C0 |TEST EAX,EAX ; 测试EAX
004013EE |. 74 1F |JE SHORT 0040140F ; 等于0 则跳 0040140F
004013F0 |. 47 |INC EDI ; EDI加
004013F1 |.^ EB CC \JMP SHORT 004013BF ; 跳到004013BF去,继续循环
004013F3 |> 85DB TEST EBX,EBX ; 测试EBX
004013F5 |. 74 18 JE SHORT 0040140F ; 等于0 则跳0040140F,ERROR提示
004013F7 |. 6A 00 PUSH 0 ; 0压栈
004013F9 |. 68 F8B04200 PUSH 0042B0F8 ; "OK"字符压栈
004013FE |. 68 E0B04200 PUSH 0042B0E0 ; 恭喜 ,字符串压栈
00401403 |. 8BCE MOV ECX,ESI
00401405 |. E8 787E0100 CALL 00419282 ; 调用MESSAGEBOXEXA
0040140A |. 5F POP EDI
0040140B |. 5E POP ESI
0040140C |. 5B POP EBX
0040140D |. 59 POP ECX
0040140E |. C3 RET
0040140F |> 6A 00 PUSH 0 ; 参数 0压栈
00401411 |. 68 D8B04200 PUSH 0042B0D8 ; ASCII "ERROR"
00401416 |. 68 CCB04200 PUSH 0042B0CC ; "KEY不正确!" 压栈
0040141B |. 8BCE MOV ECX,ESI
0040141D |. E8 607E0100 CALL 00419282 ; 条用MESSAGEBOXEXA
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这个回复太好了,写的太详细了,太适合我等菜鸟学习了,感谢楼上的!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
UnpackMe
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
先学习学习之
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
感谢,努力学习中。
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
先去壳,一个shoooo的壳,一路F8就可以.
UnpackMe
算法:#include <stdio.h>
#include <windows.h>
main()
{
int a[]={0x12,0x2B,0x35,0x26,0x20,0x28,0x0A,0x22};
int tmp[100];
for (int i=0;i<8;i++)
{
tmp[i]=a[i]^0x44;
tmp[i]-=1;
}
for (int i=0;i<8;i++)
{
printf("%c",tmp[i]);
Sleep(500);
}
}
DEV C++ 编译器成功
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
还是先学好基础,在仔细看啊
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
感谢上面的分析,学习学习了。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
我也来学习学习~
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
8会追码啦!!
|
|
|