2012-2-22 15:20
砖家叫兽
扩充剧本上限到999 以及更高级关于栈结构的运用
00417EF8 |. C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0
00417EFF |. B9 70074B00 MOV ECX,Ekd5.004B0770
00417F04 |. E8 070F0000 CALL Ekd5.00418E10
00417F09 |. 25 FF000000 AND EAX,0FF
00417F0E |. 8B0D FC7F5000 MOV ECX,DWORD PTR DS:[507FFC]
这里就是关键 从指针20XX 取出来 剧本号就完全利用77 指令
77 P 20XX = C 10 即跳转XXX_010.XXX剧本
00417F14 |. 81F9 E8030000 CMP ECX,3E8
00417F1A |. 75 07 JNZ SHORT Ekd5.00417F23
00417F1C |. E8 3F5A0C00 CALL Ekd5.004DD960
这个是 =1000 出栈 的情况
00417F21 |. EB 65 JMP SHORT Ekd5.00417F88
00417F23 |> E8 78590C00 CALL Ekd5.004DD8A0
否则 入栈 当然不是EBP 啦 是个类似栈结构的存储空间 (用于递归调用剧本?)
00417F28 |. 81F9 E8030000 CMP ECX,3E8
00417F2E |. 77 58 JA SHORT Ekd5.00417F88
00417F30 |. 90 NOP
00417F31 |. 90 NOP
00417F32 |. 90 NOP
上面属于最新添加的 应用层次高
下面是 扩充999部分
00417F33 |. 8BC1 MOV EAX,ECX
00417F35 |. 99 CDQ
00417F36 |. 33C9 XOR ECX,ECX
00417F38 |. B1 64 MOV CL,64
00417F3A |. F7F9 IDIV ECX
00417F3C |. 50 PUSH EAX
00417F3D |. 8BC2 MOV EAX,EDX
00417F3F |. 99 CDQ
00417F40 |. B1 0A MOV CL,0A
00417F42 |. F7F1 DIV ECX
00417F44 |. 50 PUSH EAX
00417F45 |. 52 PUSH EDX
分离了 个 十 百 位
00417F46 |. B9 06904D00 MOV ECX,Ekd5.004D9006 ; ASCII "JINYONG_000.EEX"
00417F4B |> 8039 30 /CMP BYTE PTR DS:[ECX],30
00417F4E |. 72 05 |JB SHORT Ekd5.00417F55
00417F50 |. 8039 39 |CMP BYTE PTR DS:[ECX],39
00417F53 |. 76 0B |JBE SHORT Ekd5.00417F60
00417F55 |> 81F9 18904D00 |CMP ECX,Ekd5.004D9018
00417F5B |. 73 60 |JNB SHORT Ekd5.00417FBD
00417F5D |. 41 |INC ECX
00417F5E |.^ EB EB \JMP SHORT Ekd5.00417F4B
从剧本开始的地址 搜索到第一个数字 如果是 R_00.EEX 这样的名称 那么非常不幸的 搜索到第一个0 以后 自动覆盖三个数字
搞不好变成 R_000EEX 没有后缀的杯具
00417F60 |> 83C1 02 ADD ECX,2
00417F63 |. 33D2 XOR EDX,EDX
00417F65 |> 58 /POP EAX
00417F66 |. 04 30 |ADD AL,30
00417F68 |. 8801 |MOV BYTE PTR DS:[ECX],AL
00417F6A |. 42 |INC EDX
00417F6B |. 49 |DEC ECX
00417F6C |. 83FA 03 |CMP EDX,3
00417F6F |.^ 72 F4 \JB SHORT Ekd5.00417F65
这就是覆盖数字了
00417F71 |. 90 NOP
00417F72 |. 90 NOP
00417F73 |. 90 NOP
00417FA8 |. 90 NOP
00417FA9 |. 90 NOP
这里接回去 顺便说一下 由于原先字串预设长度不够 我换了地址,这个大家酌情吧
00417FAA |. C745 E8 00904>MOV DWORD PTR SS:[EBP-18],Ekd5.004D9000 ; ASCII "SCENE\JINYONG_000.EEX"
[color=Silver][[i] 本帖最后由 砖家叫兽 于 2012-2-22 15:27 编辑 [/i]][/color]
2012-2-22 15:45
砖家叫兽
出栈算法
004DD960 55 PUSH EBP
004DD961 8BEC MOV EBP,ESP
004DD963 60 PUSHAD
004DD964 A1 009F4D00 MOV EAX,DWORD PTR DS:[4D9F00]
保留一个首地址
004DD969 B9 06904D00 MOV ECX,Ekd5.004D9006 ; ASCII "JINYONG_000.EEX"
004DD96E 8BD1 MOV EDX,ECX
004DD970 81FA 20904D00 CMP EDX,Ekd5.004D9020 ; ASCII "SAVE\SV0%db.E5S"
004DD976 73 06 JNB SHORT Ekd5.004DD97E
004DD978 C602 00 MOV BYTE PTR DS:[EDX],0
004DD97B 42 INC EDX
004DD97C ^ EB F2 JMP SHORT Ekd5.004DD970
004DD97E 50 PUSH EAX
004DD97F 51 PUSH ECX
004DD980 6A 00 PUSH 0
004DD982 E8 D95DFFFF CALL Ekd5.004D3760
004DD987 A1 009F4D00 MOV EAX,DWORD PTR DS:[4D9F00]
004DD98C 8038 00 CMP BYTE PTR DS:[EAX],0
004DD98F 74 06 JE SHORT Ekd5.004DD997
004DD991 C600 00 MOV BYTE PTR DS:[EAX],0
004DD994 40 INC EAX
004DD995 ^ EB F5 JMP SHORT Ekd5.004DD98C
004DD997 A1 009F4D00 MOV EAX,DWORD PTR DS:[4D9F00]
004DD99C 3D 049F4D00 CMP EAX,Ekd5.004D9F04
004DD9A1 76 11 JBE SHORT Ekd5.004DD9B4
004DD9A3 8038 00 CMP BYTE PTR DS:[EAX],0
004DD9A6 75 03 JNZ SHORT Ekd5.004DD9AB
004DD9A8 48 DEC EAX
004DD9A9 ^ EB F1 JMP SHORT Ekd5.004DD99C
004DD9AB 8038 00 CMP BYTE PTR DS:[EAX],0
004DD9AE 74 03 JE SHORT Ekd5.004DD9B3
004DD9B0 48 DEC EAX
004DD9B1 ^ EB F8 JMP SHORT Ekd5.004DD9AB
004DD9B3 40 INC EAX
004DD9B4 A3 009F4D00 MOV DWORD PTR DS:[4D9F00],EAX
004DD9B9 B8 06904D00 MOV EAX,Ekd5.004D9006 ; ASCII "JINYONG_000.EEX"
004DD9BE 8038 00 CMP BYTE PTR DS:[EAX],0
004DD9C1 74 03 JE SHORT Ekd5.004DD9C6
004DD9C3 40 INC EAX
004DD9C4 ^ EB F8 JMP SHORT Ekd5.004DD9BE
004DD9C6 48 DEC EAX
004DD9C7 8038 FF CMP BYTE PTR DS:[EAX],0FF
这里有个压缩标志 把结尾后缀 .EEX 用0FF 替代
004DD9CA 75 06 JNZ SHORT Ekd5.004DD9D2
004DD9CC C700 2E454558 MOV DWORD PTR DS:[EAX],5845452E
004DD9D2 61 POPAD
004DD9D3 8BE5 MOV ESP,EBP
004DD9D5 5D POP EBP
004DD9D6 C3 RETN
这个 我就不过多解释了
[color=Silver][[i] 本帖最后由 砖家叫兽 于 2012-2-22 16:09 编辑 [/i]][/color]
2012-2-22 16:19
砖家叫兽
入栈稍微复杂
004DD8A0 55 PUSH EBP
004DD8A1 8BEC MOV EBP,ESP
004DD8A3 60 PUSHAD
004DD8A4 A1 009F4D00 MOV EAX,DWORD PTR DS:[4D9F00]
004DD8A9 3D 449F4D00 CMP EAX,Ekd5.004D9F44
004DD8AE 73 08 JNB SHORT Ekd5.004DD8B8
由于空间大小限制 所以这个CMP 用于防止过界
004DD8B0 8038 00 CMP BYTE PTR DS:[EAX],0
004DD8B3 74 4B JE SHORT Ekd5.004DD900
找到空位置
004DD8B5 40 INC EAX
004DD8B6 ^ EB F1 JMP SHORT Ekd5.004DD8A9
004DD8B8 B8 049F4D00 MOV EAX,Ekd5.004D9F04
004DD8BD 8038 00 CMP BYTE PTR DS:[EAX],0
004DD8C0 74 03 JE SHORT Ekd5.004DD8C5
004DD8C2 40 INC EAX
004DD8C3 ^ EB F8 JMP SHORT Ekd5.004DD8BD
004DD8C5 40 INC EAX
从这里开始前移
004DD8C6 BA 049F4D00 MOV EDX,Ekd5.004D9F04
004DD8CB 3D 609F4D00 CMP EAX,Ekd5.004D9F60
004DD8D0 73 08 JNB SHORT Ekd5.004DD8DA
004DD8D2 8A08 MOV CL,BYTE PTR DS:[EAX]
004DD8D4 880A MOV BYTE PTR DS:[EDX],CL
004DD8D6 40 INC EAX
004DD8D7 42 INC EDX
004DD8D8 ^ EB F1 JMP SHORT Ekd5.004DD8CB
往前面复制
004DD8DA 81FA 609F4D00 CMP EDX,Ekd5.004D9F60
004DD8E0 73 06 JNB SHORT Ekd5.004DD8E8
004DD8E2 C602 00 MOV BYTE PTR DS:[EDX],0
后面全部填充00
004DD8E5 42 INC EDX
004DD8E6 ^ EB F2 JMP SHORT Ekd5.004DD8DA
004DD8E8 8038 00 CMP BYTE PTR DS:[EAX],0
004DD8EB 75 03 JNZ SHORT Ekd5.004DD8F0
004DD8ED 48 DEC EAX
004DD8EE ^ EB F8 JMP SHORT Ekd5.004DD8E8
004DD8F0 8038 00 CMP BYTE PTR DS:[EAX],0
004DD8F3 74 03 JE SHORT Ekd5.004DD8F8
004DD8F5 48 DEC EAX
004DD8F6 ^ EB F8 JMP SHORT Ekd5.004DD8F0
004DD8F8 40 INC EAX
004DD8F9 A3 009F4D00 MOV DWORD PTR DS:[4D9F00],EAX
修改记录
004DD8FE ^ EB A4 JMP SHORT Ekd5.004DD8A4
004DD900 40 INC EAX
004DD901 A3 009F4D00 MOV DWORD PTR DS:[4D9F00],EAX
004DD906 68 06904D00 PUSH Ekd5.004D9006 ; ASCII "JINYONG_000.EEX"
004DD90B 50 PUSH EAX
004DD90C 6A 00 PUSH 0
004DD90E E8 4D5EFFFF CALL Ekd5.004D3760
复制信息
004DD913 33DB XOR EBX,EBX
004DD915 83FB 06 CMP EBX,6
004DD918 73 38 JNB SHORT Ekd5.004DD952
004DD91A 8B11 MOV EDX,DWORD PTR DS:[ECX]
004DD91C 33C0 XOR EAX,EAX
004DD91E 83F8 04 CMP EAX,4
004DD921 73 15 JNB SHORT Ekd5.004DD938
004DD923 80FA 61 CMP DL,61 字母小写 a
004DD926 72 08 JB SHORT Ekd5.004DD930
004DD928 80FA 7A CMP DL,7A 字母小写z
004DD92B 77 03 JA SHORT Ekd5.004DD930
004DD92D 80EA 20 SUB DL,20 这就变成大写字母
004DD930 8ADA MOV BL,DL
004DD932 C1CA 08 ROR EDX,8
004DD935 40 INC EAX
004DD936 ^ EB E6 JMP SHORT Ekd5.004DD91E
004DD938 81FA 2E454558 CMP EDX,5845452E
这个数值其实是文字 .EEX
004DD93E 74 04 JE SHORT Ekd5.004DD944
004DD940 43 INC EBX
004DD941 49 DEC ECX
004DD942 ^ EB D1 JMP SHORT Ekd5.004DD915
004DD944 C601 FF MOV BYTE PTR DS:[ECX],0FF
检查末尾的0FF这个标记 之前说了 压缩文件后缀
004DD947 41 INC ECX
004DD948 8039 00 CMP BYTE PTR DS:[ECX],0
004DD94B 74 05 JE SHORT Ekd5.004DD952
004DD94D C601 00 MOV BYTE PTR DS:[ECX],0
004DD950 ^ EB F5 JMP SHORT Ekd5.004DD947
004DD952 61 POPAD
004DD953 8BE5 MOV ESP,EBP
004DD955 5D POP EBP
004DD956 C3 RETN
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.