|
|
|
|
|
[求助]请教各位高手一个关于EAX赋值的问题
NEG 是求补;求补和求反是有区别的吧? NEG指令的条件码设置情况是:NEG指令的条件码按求补后的结果设置:只有当操作数 为0时求补运算的结果使CF=0,其它情况则均为1。只有当字节运算时对-128求补以及字 运算时对-32768求补的情况下OF=1,其它则均为0。 概念复习: 原码、反码、补码 我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个10进制数如何转换为二进制数。 不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 现在想知道,-5在计算机中如何表示? 在计算机中,负数以其正值的补码形式表达。 什么叫补码呢?这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。 补码:反码加1称为补码。 也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。 比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为: 11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011 所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。 再举一例,我们来看整数-1在计算机中如何表示。 假设这也是一个int类型,那么: 1、先取1的原码:00000000 00000000 00000000 00000001 2、得反码: 11111111 11111111 11111111 11111110 3、得补码: 11111111 11111111 11111111 11111111 可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QQ消息禁发工具
仅仅靠if(!strcmp(name,"#32770")) 判断,会不会存在QQ版本问题? |
|
|
|
|
|
|
|
|
|
|
|
一个变型过的MD5,高手指点
贴一段标准的Md5,不知道对你是否有帮助 标准Md5函数 00679B28 /$ 55 push ebp 00679B29 |. 8BEC mov ebp,esp 00679B2B |. 53 push ebx 00679B2C |. 56 push esi 00679B2D |. 8B5D 08 mov ebx,[arg.1] 00679B30 |. 33D2 xor edx,edx 00679B32 |. 8D43 40 lea eax,dword ptr ds:[ebx+40] 00679B35 |> 8B08 /mov ecx,dword ptr ds:[eax] 00679B37 |. 8948 10 |mov dword ptr ds:[eax+10],ecx 00679B3A |. 42 |inc edx 00679B3B |. 83C0 04 |add eax,4 00679B3E |. 83FA 04 |cmp edx,4 00679B41 |.^ 7C F2 \jl short TempDump.00679B35 ; MD5 4个标准常数 00679B43 |. 33F6 xor esi,esi i:=0 T0 39 (40) ; 0 00679B45 |> 8BC6 /mov eax,esi EAX=i 00679B47 |. 83E0 03 |and eax,3 00679B4A |. 83E8 01 |sub eax,1 EAX:=(i and 3)-1 ; Switch (cases 0..3) 00679B4D |. 72 0A |jb short TempDump.00679B59 00679B4F |. 74 27 |je short TempDump.00679B78 00679B51 |. 48 |dec eax 00679B52 |. 74 43 |je short TempDump.00679B97 00679B54 |. 48 |dec eax 00679B55 |. 74 5F |je short TempDump.00679BB6 00679B57 |. EB 7A |jmp short TempDump.00679BD3 00679B59 |> 56 |push esi i ; /Arg6; Case 0 of switch 00679B4A 00679B5A |. 8B53 5C |mov edx,dword ptr ds:[ebx+5C] d ; | 00679B5D |. 52 |push edx ; |Arg5 00679B5E |. 8B4B 58 |mov ecx,dword ptr ds:[ebx+58] c ; | 00679B61 |. 51 |push ecx ; |Arg4 00679B62 |. 8B43 54 |mov eax,dword ptr ds:[ebx+54] b ; | 00679B65 |. 50 |push eax ; |Arg3 00679B66 |. 8B53 50 |mov edx,dword ptr ds:[ebx+50] a ; | 00679B69 |. 52 |push edx ; |Arg2 00679B6A |. 53 |push ebx ; |Arg1 00679B6B |. E8 48020000 |call TempDump.00679DB8 ; \TempDump.00679DB8 00679B70 |. 83C4 18 |add esp,18 00679B73 |. 8943 50 |mov dword ptr ds:[ebx+50],eax a=XXX 00679B76 |. EB 5B |jmp short TempDump.00679BD3 00679B78 |> 56 |push esi i ; /Arg6; Case 1 of switch 00679B4A 00679B79 |. 8B4B 58 |mov ecx,dword ptr ds:[ebx+58] c ; | 00679B7C |. 51 |push ecx ; |Arg5 00679B7D |. 8B43 54 |mov eax,dword ptr ds:[ebx+54] b ; | 00679B80 |. 50 |push eax ; |Arg4 00679B81 |. 8B53 50 |mov edx,dword ptr ds:[ebx+50] a ; | 00679B84 |. 52 |push edx ; |Arg3 00679B85 |. 8B4B 5C |mov ecx,dword ptr ds:[ebx+5C] d ; | 00679B88 |. 51 |push ecx ; |Arg2 00679B89 |. 53 |push ebx ; |Arg1 00679B8A |. E8 29020000 |call TempDump.00679DB8 ; \TempDump.00679DB8 00679B8F |. 83C4 18 |add esp,18 00679B92 |. 8943 5C |mov dword ptr ds:[ebx+5C],eax d=xxx 00679B95 |. EB 3C |jmp short TempDump.00679BD3 00679B97 |> 56 |push esi i ; /Arg6; Case 2 of switch 00679B4A 00679B98 |. 8B43 54 |mov eax,dword ptr ds:[ebx+54] b ; | 00679B9B |. 50 |push eax ; |Arg5 00679B9C |. 8B53 50 |mov edx,dword ptr ds:[ebx+50] a ; | 00679B9F |. 52 |push edx ; |Arg4 00679BA0 |. 8B4B 5C |mov ecx,dword ptr ds:[ebx+5C] d ; | 00679BA3 |. 51 |push ecx ; |Arg3 00679BA4 |. 8B43 58 |mov eax,dword ptr ds:[ebx+58] c ; | 00679BA7 |. 50 |push eax ; |Arg2 00679BA8 |. 53 |push ebx ; |Arg1 00679BA9 |. E8 0A020000 |call TempDump.00679DB8 ; \TempDump.00679DB8 00679BAE |. 83C4 18 |add esp,18 00679BB1 |. 8943 58 |mov dword ptr ds:[ebx+58],eax c=xxx 00679BB4 |. EB 1D |jmp short TempDump.00679BD3 00679BB6 |> 56 |push esi i ; /Arg6; Case 3 of switch 00679B4A 00679BB7 |. 8B53 50 |mov edx,dword ptr ds:[ebx+50] a ; | 00679BBA |. 52 |push edx ; |Arg5 00679BBB |. 8B4B 5C |mov ecx,dword ptr ds:[ebx+5C] d ; | 00679BBE |. 51 |push ecx ; |Arg4 00679BBF |. 8B43 58 |mov eax,dword ptr ds:[ebx+58] c ; | 00679BC2 |. 50 |push eax ; |Arg3 00679BC3 |. 8B53 54 |mov edx,dword ptr ds:[ebx+54] b ; | 00679BC6 |. 52 |push edx ; |Arg2 00679BC7 |. 53 |push ebx ; |Arg1 00679BC8 |. E8 EB010000 |call TempDump.00679DB8 ; \TempDump.00679DB8 00679BCD |. 83C4 18 |add esp,18 00679BD0 |. 8943 54 |mov dword ptr ds:[ebx+54],eax b=xxx 00679BD3 |> 46 |inc esi ; Default case of switch 00679B4A 00679BD4 |. 83FE 40 |cmp esi,40 00679BD7 |.^ 0F8C 68FFFFFF \jl TempDump.00679B45 00679BDD |. 33D2 xor edx,edx edx=0 00679BDF |. 8D43 50 lea eax,dword ptr ds:[ebx+50] a 00679BE2 |> 8B08 mov ecx,dword ptr ds:[eax] 00679BE4 |. 0148 F0 add dword ptr ds:[eax-10],ecx 初始常数 00679BE7 |. 42 inc edx 00679BE8 |. 83C0 04 add eax,4 00679BEB |. 83FA 04 cmp edx,4 00679BEE |.^ 7C F2 jl short TempDump.00679BE2 Count[i]+a b c d 00679BF0 |. 5E pop esi 00679BF1 |. 5B pop ebx 00679BF2 |. 5D pop ebp 00679BF3 \. C3 retn 00679DB8 /$ 55 push ebp 00679DB9 |. 8BEC mov ebp,esp 00679DBB |. 83C4 F8 add esp,-8 00679DBE |. 53 push ebx 00679DBF |. 56 push esi 00679DC0 |. 8B45 1C mov eax,[arg.6] i 00679DC3 |. 8B4D 08 mov ecx,[arg.1] 待Md5字符串Str 00679DC6 |. 8BD0 mov edx,eax 00679DC8 |. 8BD8 mov ebx,eax 00679DCA |. C1FA 04 sar edx,4 //除16 00679DCD |. 83E3 0F and ebx,0F ebx=0~F 00679DD0 |. 895D FC mov [local.1],ebx //保存起来 00679DD3 |. 8BDA mov ebx,edx 00679DD5 |. 83EB 01 sub ebx,1 //确定执行那一轮变换 0-15 ; Switch (cases 0..3) 00679DD8 |. 72 0A jb short TempDump.00679DE4 00679DDA |. 74 23 je short TempDump.00679DFF 00679DDC |. 4B dec ebx 00679DDD |. 74 42 je short TempDump.00679E21 00679DDF |. 4B dec ebx 00679DE0 |. 74 5E je short TempDump.00679E40 00679DE2 |. EB 7C jmp short TempDump.00679E60 // F(x, y, z: DWORD): DWORD; 00679DE4 |> 8B75 10 mov esi,[arg.3] x ; Case 0 of switch 00679DD5 00679DE7 |. 8B5D 10 mov ebx,[arg.3] x 00679DEA |. F7D6 not esi not x 00679DEC |. 2375 18 and esi,[arg.5] (not x) and z 00679DEF |. 235D 14 and ebx,[arg.4] x and y 00679DF2 |. 0BDE or ebx,esi (x and y) or ((not x) and z) 00679DF4 |. 8B75 FC mov esi,[local.1] 1~16 //FF(Var a: DWORD; b, c, D, x: DWORD; s: byte; ac: DWORD); 00679DF7 |. 031CB1 add ebx,dword ptr ds:[ecx+esi*4] (x and y) or ((not x) and z) + Block[0] 00679DFA |. 015D 0C add [arg.2],ebx FF(var a)+(x and y) or ((not x) and z) + Block[0] 00679DFD |. EB 61 jmp short TempDump.00679E60 // G(x, y, z: DWORD): DWORD; 00679DFF |> 8B75 18 mov esi,[arg.5] z ; Case 1 of switch 00679DD5 00679E02 |. 8B5D 10 mov ebx,[arg.3] x 00679E05 |. F7D6 not esi not z 00679E07 |. 2375 14 and esi,[arg.4] (not z) and y 00679E0A |. 235D 18 and ebx,[arg.5] x and z 00679E0D |. 0BDE or ebx,esi (x and z) or ((not z) and y) 00679E0F |. 8B75 FC mov esi,[local.1] 00679E12 |. 8D34B6 lea esi,dword ptr ds:[esi+esi*4] 00679E15 |. 46 inc esi 5*(i and F) +1 00679E16 |. 83E6 0F and esi,0F 00679E19 |. 031CB1 add ebx,dword ptr ds:[ecx+esi*4] 1 6 11 0 5 10 15 4 9 14... 00679E1C |. 015D 0C add [arg.2],ebx 00679E1F |. EB 3F jmp short TempDump.00679E60 // H(x, y, z: DWORD): DWORD; 00679E21 |> 8B5D FC mov ebx,[local.1] ; Case 2 of switch 00679DD5 00679E24 |. 8D1C5B lea ebx,dword ptr ds:[ebx+ebx*2] 00679E27 |. 83C3 05 add ebx,5 3*(i and F)+5 00679E2A |. 83E3 0F and ebx,0F 00679E2D |. 8B0C99 mov ecx,dword ptr ds:[ecx+ebx*4] 5 8 11 14 1 00679E30 |. 8B5D 10 mov ebx,[arg.3] x 00679E33 |. 335D 14 xor ebx,[arg.4] x xor y 00679E36 |. 335D 18 xor ebx,[arg.5] x xor y xor z 00679E39 |. 03CB add ecx,ebx 00679E3B |. 014D 0C add [arg.2],ecx 00679E3E |. EB 20 jmp short TempDump.00679E60 //I(x, y, z: DWORD): DWORD; 00679E40 |> 8B5D FC mov ebx,[local.1] ; Case 3 of switch 00679DD5 00679E43 |. 8BF3 mov esi,ebx i and F 00679E45 |. C1E3 03 shl ebx,3 8*(i and F) 00679E48 |. 2BDE sub ebx,esi -i=7*(i and F) 00679E4A |. 83E3 0F and ebx,0F 00679E4D |. 8B0C99 mov ecx,dword ptr ds:[ecx+ebx*4] 0 7 14 5 12... 00679E50 |. 8B5D 18 mov ebx,[arg.5] z 00679E53 |. F7D3 not ebx not z 00679E55 |. 0B5D 10 or ebx,[arg.3] (not z) or x 00679E58 |. 335D 14 xor ebx,[arg.4] ((not z) or x) xor y 00679E5B |. 03CB add ecx,ebx 00679E5D |. 014D 0C add [arg.2],ecx 00679E60 |> 8BC8 mov ecx,eax ; Default case of switch 00679DD5 00679E62 |. 8D1495 D8656800 lea edx,dword ptr ds:[edx*4+6865D8] 00679E69 |. 83E1 03 and ecx,3 00679E6C |. 8B0485 D8646800 mov eax,dword ptr ds:[eax*4+6864D8] 00679E73 |. 0345 0C add eax,[arg.2] //加上常数 00679E76 |. 33DB xor ebx,ebx 0 00679E78 |. 8A1C0A mov bl,byte ptr ds:[edx+ecx] //循环N 00679E7B |. 8945 F8 mov [local.2],eax EAX=x x := (x Shl N) Or (x Shr (32 - N)); 00679E7E |. 8B55 F8 mov edx,[local.2] x 00679E81 |. 8BCB mov ecx,ebx n 00679E83 |. D3E2 shl edx,cl x shl n 00679E85 |. B9 20000000 mov ecx,20 00679E8A |. 8B45 F8 mov eax,[local.2] x 00679E8D |. 2BCB sub ecx,ebx 20-n 00679E8F |. D3E8 shr eax,cl x shr (20-n) 00679E91 |. 0BD0 or edx,eax (x shl n) or (x shr (20-n)) 00679E93 |. 0355 10 add edx,[arg.3] 00679E96 |. 8BC2 mov eax,edx 00679E98 |. 5E pop esi 00679E99 |. 5B pop ebx 00679E9A |. 59 pop ecx 00679E9B |. 59 pop ecx 00679E9C |. 5D pop ebp 00679E9D \. C3 retn |
|
|
一个变型过的MD5,高手指点
.text:00401960 xor esi, edi .text:00401962 and esi, edx .text:00401964 xor esi, ebx .text:00401966 mov ebx, [ebp+var_8] // .text:00401969 add esi, [eax] .text:0040196B add eax, 4 .text:0040196E lea esi, [ebx+esi-57CFB9EDh] //加上第7轮变换常数后开始,rot(x, s); .text:00401975 mov ebx, esi x .text:00401977 shr ebx, 0Fh x shr (32-N) .text:0040197A shl esi, 11h x shl N .text:0040197D or ebx, esi ebx=(x shr (32-N)) or (x shl N) .text:0040197F mov esi, edx .text:00401981 add ebx, edx .text:00401983 xor esi, edi //edi?? .text:00401985 and esi, ebx .text:00401987 mov [ebp+var_8], ebx .text:0040198A mov ebx, [ebp+arg_4] .text:0040198D xor esi, edi .text:0040198F add esi, [eax] .text:00401991 add eax, 4 .text:00401994 lea esi, [ebx+esi-2B96AFFh] //第8轮变换常数 .text:0040199B mov ebx, esi .text:0040199D shl ebx, 16h .text:004019A0 shr esi, 0Ah .text:004019A3 or ebx, esi .text:004019A5 mov esi, edx .text:004019A7 add ebx, [ebp+var_8] 感觉你贴的代码 是第7~8轮变换的代码,但好像没有完整的一轮代码,现在处理的是FF()函数 |
|
|
|
|
|
|
|
|
[讨论]看看hying~~~~壳
据说有 0.80了 |
|
|
请看看这个壳(高手请入)[原创]
可能是Delphi UPX2 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值