首页
社区
课程
招聘
[已解决]求教如何使用java编写加壳程序对PE文件进行加壳
发表于: 2017-5-7 18:24 5911

[已解决]求教如何使用java编写加壳程序对PE文件进行加壳

2017-5-7 18:24
5911

最近领了个毕设题目是使用JAVA编写加壳程序对PE文件进行加壳。

PE文件的读入压缩和加密等都能解决,但是一直想不出怎么把解密解压缩的模块写入新的PE文件中。

看各位前辈用C++写的加壳程序大多是写了个shell.dll。但我想不出如何实现把java代码写入exe文件中。

目前有个思路是把解密解压缩的壳模块导出为一个jar文件,把它转换成exe文件后再读入并添加到目标文件的后面。不知这个方法是否可行。

求各路大神解救。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 5327
活跃值: (3719)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
2

文件解析及加壳过程可以用java写,壳代码还是用c写吧 ,建议还是全c        

2017-5-8 06:43
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
littlewisp 文件解析及加壳过程可以用java写,壳代码还是用c写吧 ,建议还是全c     & ...
谢谢指导,我觉得在这个问题上我还是放弃java吧
2017-5-8 13:11
0
雪    币: 5327
活跃值: (3719)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
4
直接全C多好,为了使用java而使用吗
2017-5-8 13:14
0
雪    币: 1272
活跃值: (746)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
5
这个问题就需要来谈谈壳的架构问题了。
壳的三大架构
1.最早的壳几乎都是virus演化来的,大部分都是汇编直接写的。
好处就是直接可以把汇编代码复制出来当作壳的loader代码添加(感染)到程序上
知名的比如aspack,upx,telock,PESpin

2.随着对于反调试要求越来越高,功能越来越多,代码一多就难以维护。
于是诞生了新的壳架构,功能采用DLL开发,使用loader来加载
这里有两个变种:
ShellCode  Loader  +  DLL      ASProtect。Themida,ACProtect等等你所熟悉的加密壳绝大部分都是这样的架构
memory  loader  +  DLL  bigfoot为代表的bambam,ZProtect,eXPressor,npack,ChinaProtect等等
这种架构简单,好维护,更好调试。其实许多其他壳或多或少的都使用这两种架构

3.对于一些纯VM的保护壳,由于没有固定代码(VMProtect等)
所以对于这样的需求首先你需要一个codegen(这个东东将陪伴你写壳的一生)
而且对于codegen其实完全可以构造一个完整的壳代码(调试比较麻烦)
不管什么语言开发的加壳软件最终都要回到opcode操作上,而对于opcode其实用神马语言都差不多

这三种架构介绍完了。那么谈谈java写壳的问题吧,我没有用java写过壳,但是我用C#写过~
楼主的问题其实可以简单的从语言优势上来解答:
如果说开发第三种壳用啥其实都差不多,Java和C#说不定更有优势。
上面我们说到codegen的问题,真正不适合开发的地方其实主要是在各种地址转换上面,
反汇编引擎反汇编的都是opcode结构,然后再将这些opcode串联起来构造出AST,省下的就是mutation,vm,还是其他等等操作了,
如果单纯为了解决opcode--->AST(Abstract  Syntax  Tree抽象语法树)解决了地址转换这个问题的话其实汇编,C\C++还是Java都差不多。
反而由于Java和C#这些语言有很好的容器可以更好的来控制对象
opcode生成其实也不是难事,这些用Java还是C++其实都差不多。

真正的难点就在于上面所说的壳Loader的开发上,不管是汇编,C\C++,Delphi(不管在国内外特别是国外其实许多壳都是Delphi开发的)
都可以直接开发DLL,直接拿来变形后塞进原始程序当作壳的Loader  Main部分。
而Java就只能从codegen来构造壳代码了。。。
这是一件很痛苦的事情(相信我~如果你用过Java写过c语言编译器-带连接器的那种你就会明白痛苦了)

综上所述~介于楼主的语言选择问题,估计多数是只会Java,或者需要在web层调用。
那么最好的办法还是壳主体ASM,C\C++来开发,然后开发成命令行版本,然后Java调用这个模块。
架构就这样了,省下的就是动手操作了~祝君好运~
2017-5-8 15:15
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Anskya 这个问题就需要来谈谈壳的架构问题了。 壳的三大架构 1.最早的壳几乎都是virus演化来的,大部分都是汇编直接写的。 好处就是直接可以把汇编代码复制出来当作壳的loader代码添加(感染)到程序 ...
多谢指点,已经开始学习C++了
2017-5-9 14:22
0
游客
登录 | 注册 方可回帖
返回
//