这几日无聊,到论坛上闲逛,看到了别人发了一个bat文件,运行之后稍等一会儿,发现在该目录下生成了一个exe文件并自动打开运行了。于是我便想起网上一篇关于 “ exe to bat的实现与应用”的文章。但是在该文中,并没有解释exe to bat的原理,于是我就写下了本文。
通过编辑生成的bat文件后发现,里面基本都是类似于“Echo e 100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 >>hke0.tmp”这样的语句。这句的功能就是把一串数据写入到hke0.tmp这个文件中。看着这串数据,再看看bat文件末尾的几句代码。
我恍然大悟,原来exe to bat就是把可执行文件先转换为机器语言,然后再复制成类似“e 100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00”的16进制形式,再加上echo等一些基本语句,就生成了bat文件。运行bat之后,批处理就会把这些16进制文本再写入到临时文件中,然后使用debug命令把临时文件中的机16进制文本再转化为二进制的可执行文件。
在bat文件的末尾,我找到了“debug<hkel.tmp>nul”这句,就是把hkel.tmp里的内容debug成可执行文件。这证实了我的猜想,至此exe2bat原理就简单的剖析完了,希望对大家们有所帮助。