能力值:
( LV4,RANK:50 )
|
-
-
26 楼
重定位多了項那个sizeofblock 要加大。
按图片放大
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
aker刚刚的那个我看过的10byte..如果配合上我说的这种方法,应该可以压缩到8byte..好想看下10byte以内的思路..
|
能力值:
( LV8,RANK:130 )
|
-
-
28 楼
[QUOTE=vxasm;516382]12字节,将ShellExecuteEx的参数预先放在数据区,直接调用即可。数据区的布局用数组表示为如下:
//sizeof(SHELLEXECUTEINFO)=0x3c,15个DWORD
DWORD ShellEx[] = {
0x0000003C, //1,cbSize
...[/QUOTE]
我就是这么做的12个字节搞定!
|
能力值:
( LV4,RANK:50 )
|
-
-
29 楼
用过13楼 的方法先在数据区先放函数参数,但是..................
呵呵,第一次用ShellExecuteA 规规矩矩压6个参数,结果25byte
第2次,还是用ShellExecuteA,但先在数据区放6个参数,但我汇编撇,用rep movs 传6次到栈里的,结果弄下来还是21byte ,
最后用WinExec交了个14字节的.........
学习这种:call [eax+xx] ,能省3字节啊,有长见识了
那些用几个字节搞定的牛人们该放答案了哈.......
|
能力值:
( LV12,RANK:1010 )
|
-
-
30 楼
够我学很长时间了.
谢谢分享~~
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
我也是用OD写的。
先补好引入表和导出表(大家的步骤都差不多,就略过了),然后开始写代码
图1 开始写代码
003E10CA >/$ 6A 01 push 1 ; /ShowState = SW_SHOWNORMAL
003E10CC |. 68 D8104000 push 4010D8 ; |CmdLine = 004010D8 ???
003E10D1 |. FF15 14204000 call dword ptr [402014] ; \WinExec
003E10D7 \. C3 retn
003E10D8 . 65 78 70 6C 6>ascii "explorer http://"
003E10E8 . 77 77 77 2E 7>ascii "www.pediy.com",0
现在OD里面PEDIY.DLL基址是003E0000
如果用LordPE察看PEDIY.DLL,镜像基址是00400000
写代码的时候要按照00400000写,所以第二个push和call里面的地址是004010D8和00402014,因为
字符串地址=003E10D8(从OD里面看)-003E0000(OD里面DLL基址)+00400000(LordPE里面镜像基址)= 004010D8
同理WinExec的导入表地址=003E2014-003E0000+00400000=00402014
然后看一下需要重定位的地址(在OD里面)是003E10CD和003E10D3,换算成LordPE里面要用到的地址
003E10CD-003E0000+00400000=004010CD
003E10D3-003E0000+00400000=004010D3
关了OD,打开LordPE>Directory>Relocation>HexEdit
图2 编辑前
图3 编辑前2 Offset的计算
004010CD-00401000=0CD
004010D3-00401000=0D3
Type都是3 (IMAGE_REL_BASED_HIGHLOW)
我也是第一次改重定位项,看PE文档上说每一个重定位块都开始于32的倍数,虽然不知道大小怎么办,干脆就用0x30当大小了,反正后面都是0,无所谓。外面在Directories里面也要改大小。
图4 编辑后
图5 编辑后2
图6 编辑后3
重新用OD载入,完工了。
图7 完成
|
能力值:
( LV13,RANK:280 )
|
-
-
32 楼
我也有这个问题,我用的
008B1175 . 68 80308B00 push 008B3080 ; 执行打开网页的功能
008B117A . FF15 18208B00 call dword ptr [<&SHELL32.ShellExecut>; SHELL32.ShellExecuteExA
怪了,在自己电脑上,运行乱弹MessageBoxA,有时还出错,换台电脑, 一切ok,搞不明白 ,哪个大牛解释一下
|
能力值:
( LV13,RANK:250 )
|
-
-
33 楼
看起来楼上的似乎是 call 函数的地址了,我碰到过类似问题,后来由 call eax 改为 call [eax] 就好了.
|
能力值:
( LV2,RANK:85 )
|
-
-
34 楼
同样感觉~~
|
能力值:
(RANK:280 )
|
-
-
35 楼
。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
怎样得到地址 ds:ShellExecuteExA ,它不是封装在函数内部吗,要硬编码?
放BIN来学习一下。
|
能力值:
(RANK:280 )
|
-
-
37 楼
改IAT增加一个导入函数,之前我也没有想到ShellExecuteExA,习惯上认为Ex版本的函数会需要更多的参数,结果浪费了一个字节,另外用system也可以得到同样的效果,只是那个函数要等目标进程结束了才返回
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
谢谢37楼。
如果写成 call [<&SHELL32.ShellExecutExa> ]就明白了,但这句是6字节
而call ds:ShellExecuteExa 这句是5字节。
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
学习学习,相信这次活动后,我对破解会有更一步的深入
|
能力值:
( LV13,RANK:250 )
|
-
-
40 楼
.text:00401005 FF 15 9C 50 40 00 call ds:ShellExecuteExA
貌似这也是6字节吧.
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
刚弄明白,写法不同,
IDA上是这种格式: call ds:ShellExecuteExA (6字节)
我看的是OD的格式:
7D611224 E8 6CFCFFFF call ShellExecuteExA (5字节)
00401006 FF15 94404000 call dword ptr [<&SHELL32.ShellExecuteExA>] (6字节)
菜鸟向vxasm致敬
|
能力值:
( LV4,RANK:50 )
|
-
-
42 楼
晕.......大家玩的这么开心,题目在哪里啊
哈哈, 找到了,晕死,从来就没看过置顶贴
|
能力值:
( LV2,RANK:10 )
|
-
-
43 楼
好热闹。。也来吹个牛。。。修改注册表。加启动参数。0字节。。 不过估计不合题意了。。。
|
能力值:
( LV6,RANK:90 )
|
-
-
44 楼
学习中,方法看来真的很多,自己当时怎么就想不出来呢
|
|
|