能力值:
( LV15,RANK:340 )
|
-
-
2 楼
看了一下别人的回复,12字节
我这都不知道多少字节了。并且拿提供的那个测试程序加载,执行后顺利崩掉
算了,等12字节的答案瞻仰一番。
|
能力值:
( LV15,RANK:340 )
|
-
-
3 楼
嗯,想到缩短字节的方法了,用的是Kernel32.CreateProcessA吧,怪不得有人说要定位ie的位置。这样就不需要加载Shell32,取ShellExecuteA这种臃肿的办法了。
发现之前提交的这个代码运行后崩掉的原因...忘了恢复寄存器。patch一下:
003F10CA . E8 30000000 CALL pediy.003F10FF
003F10FF /$ 60 PUSHAD
003F1145 |. 8B7C24 20 MOV EDI,DWORD PTR SS:[ESP +20]
003F1149 |. 47 INC EDI
后面代码后移1字节
003F1174 |. 61 POPAD
003F1175 \. C3 RETN 继续去想CreateProcessA的方法,希望能在结束前想出来
|
能力值:
( LV15,RANK:340 )
|
-
-
4 楼
终于赶上了,还有1小时结束
实现方法:
加入CreateProcessA到引入表(插了新节),然后调用CreateProcessA打开IE。
只不过调用CreateProcessA代码太长,没时间仔细琢磨怎么缩减了 改造过程:
1. 手工修改引出表,导出自定义函数OpenUrlA。
2. 用 Stud PE 增加一个新节,用于引入CreateProcessA。(改了一下节大小,默认的0x1000没有必要)
3. 在 OpenUrlA 的开始位置[003F10CA]加入如下代码:
003F10CA . 60 PUSHAD
003F10CB . 6A 44 PUSH 44 ; _STARTUPINFO.cb = 44
003F10CD . B9 10000000 MOV ECX,10 ; 压入40字节的0作为缓冲区
003F10D2 > 6A 00 PUSH 0
003F10D4 .^ E2 FC LOOPD SHORT pediy.003F10D2
003F10D6 . 54 PUSH ESP ; /pProcessInfo
003F10D7 . 54 PUSH ESP ; |pStartupInfo
003F10D8 . 6A 00 PUSH 0 ; |CurrentDir = NULL
003F10DA . 6A 00 PUSH 0 ; |pEnvironment = NULL
003F10DC . 6A 00 PUSH 0 ; |CreationFlags = 0
003F10DE . 6A 00 PUSH 0 ; |InheritHandles = FALSE
003F10E0 . 6A 00 PUSH 0 ; |pThreadSecurity = NULL
003F10E2 . 6A 00 PUSH 0 ; |pProcessSecurity = NULL
003F10E4 . 68 80303F00 PUSH 003F3080 ; |CommandLine = "-e bbs.pediy.com"
003F10E9 . 68 50303F00 PUSH 003F3050 ; |ModuleFileName = "C:\Program Files\Internet Explorer\iexplore.exe"
003F10EE . FF15 5D503F00 CALL DWORD PTR DS:[<&KERNEL32.CreateProc>; \CreateProcessA
003F10F4 . 83C4 44 ADD ESP,44 ; 修正之前压入的44字节
003F10F7 . 61 POPAD
003F10F8 . C3 RETN
4. 修改重定位信息,对003F10E5/ 003F10EA/ 003F10F0 这三个位置进行重定位:
00000A10 9F 30 BE 30 C5 30 E5 30
00000A20 EA 30 F0 30
5. 用OD载入DLL,修正代码中的对应位置:
003F10E4 . 68 80303F00 PUSH 003F3080
003F10E9 . 68 50303F00 PUSH 003F3050
003F10EE . FF15 5D503F00 CALL DWORD PTR DS:[3F505D]好像没有漏掉的步骤了 ,完成。
|
能力值:
( LV15,RANK:340 )
|
-
-
5 楼
果然想叉了,按照之前的思路,引入ShellExecuteA能缩减为26字节:
003F10CA . 60 PUSHAD
003F10CB 6A 01 PUSH 1
003F10CD 6A 00 PUSH 0
003F10CF 6A 00 PUSH 0
003F10D1 68 50303F00 PUSH pediy.003F3050 ; ASCII "http://bbs.pediy.com"
003F10D6 68 68303F00 PUSH pediy.003F3068 ; ASCII "open"
003F10DB 6A 00 PUSH 0
003F10DD FF15 5C503F00 CALL DWORD PTR DS:[3F505C] ; Shell32.ShellExecuteA
003F10E3 61 POPAD
003F10E4 C3 RETN
这个26字节离个位数好遥远啊
|
能力值:
( LV12,RANK:250 )
|
-
-
6 楼
开始计算函数长度...
OpenUrlA 函数大小 = 47 字节
附件提交次数 = 1
得分 = min[1.0, 13/47]x100 - (1 -1 )x5 = 27.659574
|
|
|