最近在研究一游戏辅助,想看看别人的加密文件,用od看看算法汇编,记录下,具体的分析就不上传,涉及到安全就不一一明说,自己看看吧
0042E8D0 /$ 83EC 0C SUB ESP,0C
0042E8D3 |. 53 PUSH EBX
0042E8D4 |. 55 PUSH EBP
0042E8D5 |. 56 PUSH ESI
0042E8D6 |. 8B7424 1C MOV ESI,DWORD PTR SS:[ESP+1C]
0042E8DA |. 57 PUSH EDI
0042E8DB |. 8B7C24 24 MOV EDI,DWORD PTR SS:[ESP+24]
0042E8DF |. 8B0E MOV ECX,DWORD PTR DS:[ESI]
0042E8E1 |. 33DB XOR EBX,EBX
0042E8E3 |. 83FF 01 CMP EDI,1
0042E8E6 |. 0F8E F8000000 JLE 大漠综合.0042E9E4
0042E8EC |. B8 34000000 MOV EAX,34
0042E8F1 |. 8B4CBE FC MOV ECX,DWORD PTR DS:[ESI+EDI*4-4]
0042E8F5 |. 99 CDQ
0042E8F6 |. F7FF IDIV EDI
0042E8F8 |. 83C0 06 ADD EAX,6
0042E8FB |. 8BD0 MOV EDX,EAX
0042E8FD |. 48 DEC EAX
0042E8FE |. 85D2 TEST EDX,EDX
0042E900 |. 0F8E D4000000 JLE 大漠综合.0042E9DA
0042E906 |. 40 INC EAX
0042E907 |. 894424 18 MOV DWORD PTR SS:[ESP+18],EAX
0042E90B |> 81EB 4786C861 /SUB EBX,61C88647 //大循环
0042E911 |. 8D57 FF |LEA EDX,DWORD PTR DS:[EDI-1]
0042E914 |. 8BC3 |MOV EAX,EBX
0042E916 |. 895C24 14 |MOV DWORD PTR SS:[ESP+14],EBX
0042E91A |. C1E8 02 |SHR EAX,2
0042E91D |. 83E0 03 |AND EAX,3
0042E920 |. 894424 10 |MOV DWORD PTR SS:[ESP+10],EAX
0042E924 |. 33C0 |XOR EAX,EAX
0042E926 |. 85D2 |TEST EDX,EDX
0042E928 |. 7E 5D |JLE SHORT 大漠综合.0042E987
0042E92A |. 8BD6 |MOV EDX,ESI
0042E92C |> 8B72 04 |/MOV ESI,DWORD PTR DS:[EDX+4] //小循环
0042E92F |. 8BD9 ||MOV EBX,ECX
0042E931 |. 8BFE ||MOV EDI,ESI
0042E933 |. 83C2 04 ||ADD EDX,4
0042E936 |. C1EF 03 ||SHR EDI,3
0042E939 |. C1E3 04 ||SHL EBX,4
0042E93C |. 33FB ||XOR EDI,EBX
0042E93E |. 8BD9 ||MOV EBX,ECX
0042E940 |. C1EB 05 ||SHR EBX,5
0042E943 |. 8D2CB5 00000000 ||LEA EBP,DWORD PTR DS:[ESI*4]
0042E94A |. 33DD ||XOR EBX,EBP
0042E94C |. 8B6C24 10 ||MOV EBP,DWORD PTR SS:[ESP+10]
0042E950 |. 03FB ||ADD EDI,EBX
0042E952 |. 8BD8 ||MOV EBX,EAX
0042E954 |. 83E3 03 ||AND EBX,3
0042E957 |. 33DD ||XOR EBX,EBP
0042E959 |. 8B6C24 28 ||MOV EBP,DWORD PTR SS:[ESP+28]
0042E95D |. 8B5C9D 00 ||MOV EBX,DWORD PTR SS:[EBP+EBX*4]
0042E961 |. 33D9 ||XOR EBX,ECX
0042E963 |. 8B4C24 14 ||MOV ECX,DWORD PTR SS:[ESP+14]
0042E967 |. 33CE ||XOR ECX,ESI
0042E969 |. 03D9 ||ADD EBX,ECX
0042E96B |. 33FB ||XOR EDI,EBX
0042E96D |. 8B5A FC ||MOV EBX,DWORD PTR DS:[EDX-4]
0042E970 |. 03DF ||ADD EBX,EDI
0042E972 |. 8B7C24 24 ||MOV EDI,DWORD PTR SS:[ESP+24]
0042E976 |. 895A FC ||MOV DWORD PTR DS:[EDX-4],EBX
0042E979 |. 40 ||INC EAX
0042E97A |. 8D77 FF ||LEA ESI,DWORD PTR DS:[EDI-1]
0042E97D |. 8BCB ||MOV ECX,EBX
0042E97F |. 3BC6 ||CMP EAX,ESI
0042E981 |.^7C A9 |\JL SHORT 大漠综合.0042E92C
0042E983 |. 8B7424 20 |MOV ESI,DWORD PTR SS:[ESP+20]
0042E987 |> 8B16 |MOV EDX,DWORD PTR DS:[ESI]
0042E989 |. 8BD9 |MOV EBX,ECX
0042E98B |. 8BEA |MOV EBP,EDX
0042E98D |. 83E0 03 |AND EAX,3
0042E990 |. C1ED 03 |SHR EBP,3
0042E993 |. C1E3 04 |SHL EBX,4
0042E996 |. 33EB |XOR EBP,EBX
0042E998 |. 8BD9 |MOV EBX,ECX
0042E99A |. C1EB 05 |SHR EBX,5
0042E99D |. C1E2 02 |SHL EDX,2
0042E9A0 |. 33DA |XOR EBX,EDX
0042E9A2 |. 8B5424 10 |MOV EDX,DWORD PTR SS:[ESP+10]
0042E9A6 |. 33C2 |XOR EAX,EDX
0042E9A8 |. 8B5424 28 |MOV EDX,DWORD PTR SS:[ESP+28]
0042E9AC |. 03EB |ADD EBP,EBX
0042E9AE |. 8B5C24 14 |MOV EBX,DWORD PTR SS:[ESP+14]
0042E9B2 |. 8B0482 |MOV EAX,DWORD PTR DS:[EDX+EAX*4]
0042E9B5 |. 8B16 |MOV EDX,DWORD PTR DS:[ESI]
0042E9B7 |. 33C1 |XOR EAX,ECX
0042E9B9 |. 8BCB |MOV ECX,EBX
0042E9BB |. 33CA |XOR ECX,EDX
0042E9BD |. 03C1 |ADD EAX,ECX
0042E9BF |. 8B4CBE FC |MOV ECX,DWORD PTR DS:[ESI+EDI*4-4]
0042E9C3 |. 33E8 |XOR EBP,EAX
0042E9C5 |. 8B4424 18 |MOV EAX,DWORD PTR SS:[ESP+18]
0042E9C9 |. 03CD |ADD ECX,EBP
0042E9CB |. 48 |DEC EAX
0042E9CC |. 894CBE FC |MOV DWORD PTR DS:[ESI+EDI*4-4],ECX
0042E9D0 |. 894424 18 |MOV DWORD PTR SS:[ESP+18],EAX
0042E9D4 |.^0F85 31FFFFFF \JNZ 大漠综合.0042E90B
0042E9DA |> 5F POP EDI
0042E9DB |. 5E POP ESI
0042E9DC |. 5D POP EBP
0042E9DD |. 33C0 XOR EAX,EAX
0042E9DF |. 5B POP EBX
0042E9E0 |. 83C4 0C ADD ESP,0C
0042E9E3 |. C3 RETN
0042E9E4 |> 83FF FF CMP EDI,-1
0042E9E7 |. 0F8D F3000000 JGE 大漠综合.0042EAE0
0042E9ED |. B8 34000000 MOV EAX,34
0042E9F2 |. BB 56DA4CB5 MOV EBX,B54CDA56
0042E9F7 |. 99 CDQ
0042E9F8 |. F7DF NEG EDI
0042E9FA |. F7FF IDIV EDI
0042E9FC |. 897C24 24 MOV DWORD PTR SS:[ESP+24],EDI
0042EA00 |. 69C0 4786C861 IMUL EAX,EAX,61C88647
0042EA06 |. 2BD8 SUB EBX,EAX
0042EA08 |. 895C24 14 MOV DWORD PTR SS:[ESP+14],EBX
0042EA0C |. 0F84 C4000000 JE 大漠综合.0042EAD6
0042EA12 |> 8BC3 /MOV EAX,EBX
0042EA14 |. C1E8 02 |SHR EAX,2
0042EA17 |. 83E0 03 |AND EAX,3
0042EA1A |. 894424 10 |MOV DWORD PTR SS:[ESP+10],EAX
0042EA1E |. 8D47 FF |LEA EAX,DWORD PTR DS:[EDI-1]
0042EA21 |. 85C0 |TEST EAX,EAX
0042EA23 |. 7E 5B |JLE SHORT 大漠综合.0042EA80
0042EA25 |. 8D1486 |LEA EDX,DWORD PTR DS:[ESI+EAX*4]
0042EA28 |> 8B72 FC |/MOV ESI,DWORD PTR DS:[EDX-4]
0042EA2B |. 8BF9 ||MOV EDI,ECX
0042EA2D |. 8BDE ||MOV EBX,ESI
0042EA2F |. 8D2C8D 00000000 ||LEA EBP,DWORD PTR DS:[ECX*4]
0042EA36 |. C1EF 03 ||SHR EDI,3
0042EA39 |. C1E3 04 ||SHL EBX,4
0042EA3C |. 33FB ||XOR EDI,EBX
0042EA3E |. 8BDE ||MOV EBX,ESI
0042EA40 |. C1EB 05 ||SHR EBX,5
0042EA43 |. 33DD ||XOR EBX,EBP
0042EA45 |. 8B6C24 10 ||MOV EBP,DWORD PTR SS:[ESP+10]
0042EA49 |. 03FB ||ADD EDI,EBX
0042EA4B |. 8BD8 ||MOV EBX,EAX
0042EA4D |. 83E3 03 ||AND EBX,3
0042EA50 |. 83EA 04 ||SUB EDX,4
0042EA53 |. 33DD ||XOR EBX,EBP
0042EA55 |. 8B6C24 28 ||MOV EBP,DWORD PTR SS:[ESP+28]
0042EA59 |. 8B6C9D 00 ||MOV EBP,DWORD PTR SS:[EBP+EBX*4]
0042EA5D |. 8B5C24 14 ||MOV EBX,DWORD PTR SS:[ESP+14]
0042EA61 |. 33EE ||XOR EBP,ESI
0042EA63 |. 8BF3 ||MOV ESI,EBX
0042EA65 |. 33F1 ||XOR ESI,ECX
0042EA67 |. 8B4A 04 ||MOV ECX,DWORD PTR DS:[EDX+4]
0042EA6A |. 03EE ||ADD EBP,ESI
0042EA6C |. 33FD ||XOR EDI,EBP
0042EA6E |. 2BCF ||SUB ECX,EDI
0042EA70 |. 48 ||DEC EAX
0042EA71 |. 894A 04 ||MOV DWORD PTR DS:[EDX+4],ECX
0042EA74 |. 85C0 ||TEST EAX,EAX
0042EA76 |.^7F B0 |\JG SHORT 大漠综合.0042EA28
0042EA78 |. 8B7C24 24 |MOV EDI,DWORD PTR SS:[ESP+24]
0042EA7C |. 8B7424 20 |MOV ESI,DWORD PTR SS:[ESP+20]
0042EA80 |> 8B7CBE FC |MOV EDI,DWORD PTR DS:[ESI+EDI*4-4]
0042EA84 |. 8BD1 |MOV EDX,ECX
0042EA86 |. 8BEF |MOV EBP,EDI
0042EA88 |. 83E0 03 |AND EAX,3
0042EA8B |. C1EA 03 |SHR EDX,3
0042EA8E |. C1E5 04 |SHL EBP,4
0042EA91 |. 33D5 |XOR EDX,EBP
0042EA93 |. 8D2C8D 00000000 |LEA EBP,DWORD PTR DS:[ECX*4]
0042EA9A |. C1EF 05 |SHR EDI,5
0042EA9D |. 33FD |XOR EDI,EBP
0042EA9F |. 03D7 |ADD EDX,EDI
0042EAA1 |. 8B7C24 10 |MOV EDI,DWORD PTR SS:[ESP+10]
0042EAA5 |. 33C7 |XOR EAX,EDI
0042EAA7 |. 8B7C24 28 |MOV EDI,DWORD PTR SS:[ESP+28]
0042EAAB |. 8B0487 |MOV EAX,DWORD PTR DS:[EDI+EAX*4]
0042EAAE |. 8B7C24 24 |MOV EDI,DWORD PTR SS:[ESP+24]
0042EAB2 |. 8B6CBE FC |MOV EBP,DWORD PTR DS:[ESI+EDI*4-4]
0042EAB6 |. 33C5 |XOR EAX,EBP
0042EAB8 |. 8BEB |MOV EBP,EBX
0042EABA |. 33E9 |XOR EBP,ECX
0042EABC |. 8B0E |MOV ECX,DWORD PTR DS:[ESI]
0042EABE |. 03C5 |ADD EAX,EBP
0042EAC0 |. 33D0 |XOR EDX,EAX
0042EAC2 |. 2BCA |SUB ECX,EDX
0042EAC4 |. 81C3 4786C861 |ADD EBX,61C88647
0042EACA |. 890E |MOV DWORD PTR DS:[ESI],ECX
0042EACC |. 895C24 14 |MOV DWORD PTR SS:[ESP+14],EBX
0042EAD0 |.^0F85 3CFFFFFF \JNZ 大漠综合.0042EA12
0042EAD6 |> 5F POP EDI
0042EAD7 |. 5E POP ESI
0042EAD8 |. 5D POP EBP
0042EAD9 |. 33C0 XOR EAX,EAX
0042EADB |. 5B POP EBX
0042EADC |. 83C4 0C ADD ESP,0C
0042EADF |. C3 RETN
0042EAE0 |> 5F POP EDI
0042EAE1 |. 5E POP ESI
0042EAE2 |. 5D POP EBP
0042EAE3 |. B8 01000000 MOV EAX,1
0042EAE8 |. 5B POP EBX
0042EAE9 |. 83C4 0C ADD ESP,0C
0042EAEC \. C3 RETN
对于汇编寄存器,一些基础知识,罗列一下。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。
但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目的串地址,默认在ES中;此时不能混用。
在8086CPU中,只有bx、si、di、bp寄存器可以在“[…]”中来进行内存单元的寻址,比如下面指令时正确的:
MOV AX, [BX + SI]
MOV AX, [BX + DI]
MOV AX, [BP]
MOV AX, [BP + SI]
MOV AX, [BP + DI]
而下面的指令是错误的
MOV AX, [CX]
MOV AX, [AX]
MOV AX, [DX]
MOV AX, [DS]
在[…]中,这4个寄存器可以单个出现,或只能以4种组合出现:BX和SI,BX和DI,BP和SI,BP和DI,比如下面的指令时正确的:
MOV AX, [BX]
MOV AX, [SI]
MOV AX, [DI]
MOV AX, [BP]
MOV AX, [BX + SI]
MOV AX, [BX + DI]
MOV AX, [BP + SI]
MOV AX, [BP + DI]
MOV AX, [BX + SI + IDATA]
MOV AX, [BX + DI + IDATA]
MOV AX, [BP + SI + IDATA]
MOV AX, [BP + DI + IDATA]
下面的指令是错误的:
MOV AX, [BX + BP]
MOV AX, [SI + DI]
只要在[…]中使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中,比如:
MOV AX , [B] 含义 AX = (SS) * 16 + BP;
BP: 是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.