【论文存档】Windows可执行程序内存动态代码化的研究与实现

Windows可执行程序内存动态代码化的研究与实现

摘要

目前在缓冲区溢出攻击、软件加壳、软件代码保护等领域普遍使用到内存动态代码技术,具体是指编写一段二进制机器码,该代码无需经过任何预处理即可在进程内存空间的任意地址直接执行。内存动态代码一般直接使用汇编语言编写,存在开发难度较大、代码不易维护、隐藏软件风险等问题。

本课题提出一种方法用于将Windows可执行文件直接转化为内存动态代码,并给出动态代码设计、动态代码装配、命令行接口主程序、图形界面外壳四个方面的具体实现。课题解决了PE文件的读取与分析、代码自身基址重定位、数据执行保护机制的绕过、数据与代码压缩与解压、系统函数[……]

Read more

抄一份上海地铁的票价查询

起始站:
路线
请选择

终点站:
路线
请选择

票价:0元

/***** price Plugin *****/
$.fn.price = function(options){
var opts = $.extend({}, $.fn.price.defaults, options);
return this.each(function() {
var th = $(this);
var lx = th.find(opts.lx),zd = th.find(opts.zd);
var data = {“[……]

Read more

最简memmove代码

不考虑时间效率,直接rep movsb实现:

3BFE    CMP EDI,ESI
72 09    JB $+0Bh
8D740E FF    LEA ESI,[ESI+ECX-1]
8D7C0F FF    LEA EDI,[EDI+ECX-1]
FD    STD
F3:A4    REP MOVSB
FC    CLD

共16字节。

[……]

Read more

打造世界最小LZMA解压DLL(最终话)

在前面的文章里,我们通过使用UPX Stub中的代码加以手工修改PE文件导出表得到了3280byte的目标DLL(点击此处),又通过重新编译LZMA SDK将目标缩小到2970byte(点击此处)。今天我们继续精简,通过修改源代码来进一步缩小目标文件的大小。

首先我们可以看到原来LZMA解压在不加其他功能情况下的声明是:

int LzmaDecode(CLzmaDecoderState *vs, const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, unsigned char *outStream, SizeT[……]

Read more

打造世界最小LZMA解压DLL(第二弹)

一年前我曾写过一篇《手写PE文件,打造史上最小LZMA解压DLL》,最近因为涉及毕业设计,重新开始研究PE,同时也需要提供LZMA压缩功能。

对原来的程序观察后发现,UPX使用的LZMA代码并不是最优化的编译,原因是局部变量全部使用ESP寻址,而Intel x86对寄存器寻址有个ESP例外,需要多占用一字节的指令。于是重新翻出LZMA SDK,使用VC6编译出2409字节的代码(原来是2694字节)。

另外一个问题就是原来开头写的sub esp, 3e80是不对的。Windows分页机制规定,栈分配是逐页进行的,当当前栈位于页顶端时访问上面的页会引发栈空间分配,但跨页访问即认为访问越界。显[……]

Read more

(总结)重排文章与评论ID

20141118:当前博主使用的WP版本在wp-config.php中关掉Revision后依旧会在修改旧文章时出现由于Autosave导致的Rev,这部分需要手动删除。

本文适用于受不了ID跳号的重度强迫症患者,用以将文章和评论的ID完全从1开始排序。

警告:重排文章ID会导致搜索引擎索引完全失效,下面虽然会介绍一个跳转方法,但依旧非常不建议进行这个操作!

重排文章ID:
create table post_map(id int auto_increment primary key, oldid int unique key);
insert into post_map[……]

Read more

关闭WordPress revision功能

两年前刚开博的时候就发现文章的id不连续,觉得是自动保存草稿的原因,跳号也不厉害,就没去理它,结果今天突然看到跳了100多个号,我是今天早上把所有的文章都添加了tag不错,但也不至于这么夸张吧,所有修改一个小小问题都要存草稿难道?上网一查,原来不是草稿而是revision版本。。。这下就不能不管了,好不容易弄这么短的地址别没折腾几次就到1000了。。

revision在后台没有关闭的选项,需要在wp-config.php中添加:

define(‘WP_POST_REVISIONS’,false);

然后是清理多余内容的时候了。进phpMyAdmin,执行sql:

DELETE FROM[……]

Read more

【原创】简单通用的Inline Hook代码

前不久给羽毛写一个Hook时弄的,当时用的VirtualAlloc,今天发现可以创建可执行的堆,那么为了节省空间就改成HeapAlloc了。

适用于已经确定要Hook位置和需要取下的代码长度的inline hook,hook为相对地址jmp,占用5字节。不适用于要hook的地址已经有jmp类指令,比如已经被别的程序装了钩子,那样的话需要单独处理,即将原来的钩子移走的同时修改原来钩子的相对跳转值,一般情况用不上,不符合“简单”的要求。

下面贴代码:
HANDLE hHookHeap = NULL;

PVOID InstallHook(PVOID CodeAddr, LONG[……]

Read more

解决Discuz! X2附件大小16M限制

前些天都是往pianofan.net上传乐谱,今天要传音频,结果好不容易传上去说失败!

我记得明明在php.ini中设置附件大小是20M了啊。。。

Google之,答案是php.ini中有三个参数与附件上传有关:

memory_limit:脚本最大使用内存大小,这个据说要改大,但我表示怀疑,传附件并不一定需要先把整个文件读到内存里,不过看到我的设置本来就是128M,也就没管它了;

post_max_size:一个POST请求最大的容量。这是导致我刚刚上传失败的主要原因!附件上传和表单提交一样是用POST的,这个值要设置为一次附件上传(可能同时上传多个文件)的总大小,我干脆写了个100M[……]

Read more

Blog迁移至国内服务器 & IIS下WordPress伪静态处理

今天把Blog也搬过来了,原来的访问速度确实太慢,主要是服务器内存太小,还有就是到美国的带宽,况且这边备案后要求一周内网站解析过来。

搬家很简单,那边就直接把blog.gmsj.org目录打个包这边down下来,然后数据库导出一下这边导入。

然后遇到的问题是——————————Rewrite!!!!!

本来以为直接把htaccess里面的规则写到这边的httpd.ini里就可以了,结果发现不行!

研究后发现,是这边的rewrite模块不支持REQUEST_FILENAME判断是否是已存在的文件或目录。

经访问ISAPI_Rewrite官网发现,3代的ISAPI_Rewrite就支持-[……]

Read more