能力值:
( LV6,RANK:85 )
|
-
-
2 楼
不错的帖子,二次开发,加点VM进去?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
感谢分享
|
能力值:
( LV5,RANK:78 )
|
-
-
4 楼
wyfe
不错的帖子,二次开发,加点VM进去?
VM得下下个阶段了,下一步想着想研究下解压的汇编代码
|
能力值:
( LV6,RANK:85 )
|
-
-
5 楼
luoye_ATL
VM得下下个阶段了,下一步想着想研究下解压的汇编代码[em_41]
看看解压算法是自已实现的,还是用了第三方的压缩引擎
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
wyfe
看看解压算法是自已实现的,还是用了第三方的压缩引擎 UDX使用的是开源的UCL压缩库吧,那东西对于PE的压缩率很高,主要是解压速度快。一直在使用。8dbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3!0T1k6i4u0Z5N6h3#2W2M7W2)9J5k6h3y4G2L8g2)9J5c8X3!0H3k6h3&6K6L8%4g2J5j5$3g2Q4x3V1k6#2j5$3I4Q4x3V1j5`.
最后于 2023-1-7 21:55
被bestbird编辑
,原因: 添加附件
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
感谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
感谢大佬分享
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
感谢分享
|
能力值:
( LV4,RANK:40 )
|
-
-
10 楼
tql
|
能力值:
( LV9,RANK:172 )
|
-
-
11 楼
13bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2M7s2S2Q4x3V1k6#2M7s2S2Q4x3X3c8K6N6s2g2T1N6r3!0G2L8s2x3`. upx的loader是通过这个工具生成的 (也就是你上面修改的 amd64-linux.elf-fold.h )
|
能力值:
( LV5,RANK:78 )
|
-
-
12 楼
vmtest
986K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2M7s2S2Q4x3V1k6#2M7s2S2Q4x3X3c8K6N6s2g2T1N6r3!0G2L8s2x3`.
upx的loader是通过这个工具生成的 (也就是你上面修改的 amd64-linux.elf-fold.h )
是的,我后来就是用这个工具重新编译修改后的代码生成 amd64-linux.elf-fold.h 文件
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
感謝分享!
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
WIN下的,也是一样的么?
|
能力值:
( LV5,RANK:78 )
|
-
-
15 楼
dayang
WIN下的,也是一样的么? WIN的加壳流程我不太清楚,得你自己阅读源码了。loader部分的话使用的是另外的文件,在目录upx-3.96/src/stub/src/可以看到
最后于 2023-2-6 14:29
被luoye_ATL编辑
,原因:
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
请教下修改.s的汇编文件后, 怎么编译呢
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
vmtest
7a8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2M7s2S2Q4x3V1k6#2M7s2S2Q4x3X3c8K6N6s2g2T1N6r3!0G2L8s2x3`.
upx的loader是通过这个工具生成的 (也就是你上面修改的 amd64-linux.elf-fold.h )
请教下windows环境下怎么使用这个工具呢
|
能力值:
( LV5,RANK:78 )
|
-
-
18 楼
用vmtest师傅提到的工具就可以,根据说明配置好之后,编译的时候类似amd64-linux.elf-fold.h的.h文件都会重新生成的。
最后于 2023-2-9 17:01
被luoye_ATL编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
19 楼
修改入口点代码的部分,修改.h文件是不行的,或者说只修改那三个部分不行。那个长度常量后面还跟着两个校验值也会变,并且代码长度也不是固定增加5字节,具体取决于编译器生成的bin文件。生成h文件的逻辑在stub/scripts/下,主要是那给bin2h的py脚本。自行编译修改的话可以用一下
|
能力值:
( LV1,RANK:0 )
|
-
-
20 楼
楼主好!我在根据您的文章进行代码修改和复现过程中,发现一个问题,分享出来供参考。问题出现在修改入口点代码的loader部分。文章中loader异或key的位置在汇编码中,根据注释是将upx_main函数的返回值进行异或恢复,但我这里测试这样的操作会导致segmentation fault。我根据注释找到upx_main函数查看,可以获知入口点由前面的do_xmap函数返回,跟入该函数发现它的返回值实际上是ehdr->e_entry + reloc,而我们在加壳部分处理的代码实际上是直接对ehdr->e_entry进行处理的,由于reloc的存在导致返回值异或后会产生异常。 我重新分析了upx_main的流程,ehdr是该函数的第三个参数,推测前面的loader部分只是提取ehdr不会对其进行处理,进入upx_main后可看到ehdr被赋值给xo.buf,随后被传入unpackExtent函数处理。处理的代码我没仔细跟,因为根据函数名和其注释来看,该函数确实会对ehdr进行处理,应该是包含一些入口点相关的内容的,不能硬碰,另外我们在加壳部分的代码是位于packExtent的头部(申请内存并填充后立刻进行了入口点的异或),后续的处理逻辑应该和这个函数对应上了。所以根据前后对应的逻辑,我将异或恢复的代码放在了该函数后: // ehdr = Uncompress Ehdr and Phdrs unpackExtent(&xi2, &xo, f_exp, 0); // never filtered? ehdr->e_entry = (ehdr->e_entry ^ 0xdeafdeaf); 然后程序就正常运行不会报错了。 因此提出一个问题,原始版本的代码实际上仅能应用于reloc为0的情况下(do_xmap函数结尾的部分),当其不为0就会导致问题,而我这里就刚刚好踩了这个坑。我这里在简单的逻辑上修复了该问题(pack前加密,unpack后解密,没有经过do_xmap的处理和影响;但这是简单的逻辑层面的,深层上仍应该严格分析packExtent和unpackExtent函数的逻辑来确定相关修改有没有影响),供各位参考
|
能力值:
( LV1,RANK:0 )
|
-
-
21 楼
压缩数据修改,修改这4处,运行不了,会报错。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
感谢分享
|
能力值:
( LV1,RANK:0 )
|
-
-
23 楼
weekend~
压缩数据修改,修改这4处,运行不了,会报错。
你这个问题我也遇到了,答案是那个p_lx_elf里有两个同名函数,分别隶属于不同的类,用于处理不同平台下的loader(一个32位的一个64位的),你改了其中一个但实际用的是另一个就会出现这个问题,得俩都改才能保证linux下的使用没有问题
|
能力值:
( LV1,RANK:0 )
|
-
-
24 楼
Vantler
你这个问题我也遇到了,答案是那个p_lx_elf里有两个同名函数,分别隶属于不同的类,用于处理不同平台下的loader(一个32位的一个64位的),你改了其中一个但实际用的是另一个就会出现这个问题,得 ...
好的,我一会试试,谢谢~
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
为何没有修改任何文件,直接使用make(安装了camke)编译src得到的upx加壳的文件运行也会出现segmentation fault错误?
|
|
|