首页
社区
课程
招聘
[原创] UPX源码学习和简单修改
发表于: 2023-1-7 11:52 54832

[原创] UPX源码学习和简单修改

2023-1-7 11:52
54832
收藏
免费 23
支持
分享
最新回复 (49)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
26
大佬请教下,对于修改压缩数据那里修改第4个文件的时候,我的CPU架构不是amd64,是armv7l,所以不能修改amd64-linux.elf-main.c。然后我通过调试upx-3.96的源码发现实际用到了stub_arm_v5a_linux_elf_fold.h这个文件,但是在upx-3.96/src/stub/src/目录下没有找到armv5a对应的main.c。所以请教下armv5a架构下,amd64-linux.elf-main.c替换修改哪个文件好呢?
2023-5-16 16:27
0
雪    币: 548
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
感谢
2023-5-17 09:02
0
雪    币: 1242
活跃值: (1434)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
28
wx_pf 大佬请教下,对于修改压缩数据那里修改第4个文件的时候,我的CPU架构不是amd64,是armv7l,所以不能修改amd64-linux.elf-main.c。然后我通过调试upx-3.96的源码发现实 ...
你可以看下upx3.96/src/stub目录下的Makefile文件,或者在upx3.96/src目录下执行make all,根据命令行输出查看是那个文件生成的arm_v5a_linux_elf_fold.h
2023-5-21 17:25
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
29
luoye_ATL 你可以看下upx3.96/src/stub目录下的Makefile文件,或者在upx3.96/src目录下执行make all,根据命令行输出查看是那个文件生成的arm_v5a_linux_elf_f ...
非常感谢~
2023-5-26 13:35
0
雪    币: 10619
活跃值: (2314)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
能不能基于最新的upx写下改法呢
2023-5-26 14:29
0
雪    币: 102
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
31
wx_pf 大佬请教下,对于修改压缩数据那里修改第4个文件的时候,我的CPU架构不是amd64,是armv7l,所以不能修改amd64-linux.elf-main.c。然后我通过调试upx-3.96的源码发现实 ...
修改i386-linux.elf-main.c文件。可以通过观察armv5的S文件获知。armv5的S汇编码文件是空的,直接以include的方式复用armv4的S文件,所以armv5中调用的C文件代码和armv4调用的是一致的,所以应当修改armv4的C文件。但是实际上armv4的C也是空的,复用了i386-linux.elf-main.c的代码,所以最终修改目标是i386-linux.elf-main.c。另外可以挨个看下各个文件的内容和包含关系,就可以知道(只讨论linux平台)S汇编码是依据不同架构的32/64位各一份(部分由于差异会单独写一份),而C不依赖架构就只有32/64位的区别(最终对应amd64和i386的两个C),所以修改两个C文件就可以影响linux下各个架构的代码流程
2023-6-20 17:45
1
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
32

测试发现给linux可执行文件加壳可以正常工作, 但给so动态库加壳不行, 看源码, 好像还需要修改amd64-linux.elf-so_main.c这个文件来实现so的解密才行.

32位ARM好像是需要改src/stub/src/arm.v4t-linux.shlib-init.S 这个文件才行.

最后于 2023-7-25 16:06 被bxc编辑 ,原因:
2023-7-25 15:48
0
雪    币: 1242
活跃值: (1434)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
33
bxc 测试发现给linux可执行文件加壳可以正常工作, 但给so动态库加壳不行, 看源码, 好像还需要修改amd64-linux.elf-so_main.c这个文件来实现so的解密才行.32位ARM好像是需 ...
是的,因为so库和可执行文件的布局有差异,处理文件不一样,我这里只尝试了可执行文件的加壳修改
2023-7-27 14:52
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
34
按照文章修改系统一样也报错 是怎么回事尼
2023-12-8 17:36
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
35
能不能给一份修改好的源码尼!! 大佬们!!自己改老是出错
2023-12-10 03:29
0
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
Vantler 修改i386-linux.elf-main.c文件。可以通过观察armv5的S文件获知。armv5的S汇编码文件是空的,直接以include的方式复用armv4的S文件,所以armv5中调用的C文件代 ...
我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会报segment fault。请教请教?
2024-1-30 11:58
0
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
weekend~ 好的,我一会试试,谢谢~
我也遇到同样的问题,你改对了吗?
2024-1-30 15:59
0
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
骑驴找马 我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会 ...
你改好了吗,我也是一直报错~~
2024-1-30 16:01
0
雪    币: 102
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
39
骑驴找马 我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会 ...
详细说说是修改的哪一步发生错误?前面的入口点异或正常执行没错是吗?如果单纯是压缩数据加密部分的错误,我会考虑压缩加密部分有问题,因为loader中只有一行解密代码没有多余实现,要么是前后配合有问题(例如我第一页回复中那个入口点亦或的问题),要么是前面处理逻辑有问题。我自己只遇到过入口点异或/loader两函数两种seg fault情况,其他的没遇到不好说
2024-2-18 11:12
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
40
如果是使用Android下的termux如何编译汇编文件呢
2024-3-5 00:19
0
雪    币: 1810
活跃值: (4020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
感谢分享
2024-3-5 13:24
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
42
Vantler 详细说说是修改的哪一步发生错误?前面的入口点异或正常执行没错是吗?如果单纯是压缩数据加密部分的错误,我会考虑压缩加密部分有问题,因为loader中只有一行解密代码没有多余实现,要么是前后配合有问题(例 ...
如何在termux更新汇编文件呢
2024-3-6 09:42
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
43
请问windows的怎么修改压缩呢?该修改哪个c文件?谢谢
2024-3-20 18:35
0
雪    币: 102
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
44
mb_onqwmgfo 如何在termux更新汇编文件呢
恐怕需要该那个汇编编译工具的代码,我记得里面直接调用HOME环境变量(或是个啥来着,记不清了)来定位工具位置的,termux里面修改这个变量为你的地址应该就行,但是我没试过不好说
2024-3-25 14:51
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
45
咨询下呢,我在重构stub时,提示recipe for target 'upx-stubtools-stamp failed,视乎是找不到这个工具,查了下也确实没有,不知道各位有没有碰到这个问题?
2024-4-3 09:34
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
46
有哪位大神能指导下具体怎么重编译stub啊,下载了工具也没用的,谢谢了!!!
2024-4-9 10:07
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
47
大佬想问一下最新版本的upx,windwos下的loader怎么修改,我尝试过往amd64-win64.pe.S中直接加汇编,发现加不进去。往amd64-win64.pe.h中的数组直接添加机器码,运行报错bad loader。
2024-4-19 10:38
0
雪    币: 1
活跃值: (131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
骑驴找马 我也遇到同样的问题,你改对了吗?
我也是按照这个改了4处还是报segment fault,最新版源码和3.96版试了都不行,各位大佬都测试成功了吗?我的操作系统环境是ubuntu,upx version是:
upx 3.96-git-ERROR+
UCL data compression library 1.03
zlib data compression library 1.3
LZMA SDK version 4.43
Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2020 Laszlo Molnar
Copyright (C) 2000-2020 John F. Reiser
Copyright (C) 2002-2020 Jens Medoch
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
Copyright (C) 1999-2006 Igor Pavlov
UPX comes with ABSOLUTELY NO WARRANTY; for details type 'upx.out -L'.
2024-7-2 10:38
0
雪    币: 1
活跃值: (131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
DessertTH 我也是按照这个改了4处还是报segment fault,最新版源码和3.96版试了都不行,各位大佬都测试成功了吗?我的操作系统环境是ubuntu,upx version是: upx 3.96-git ...
解决了,对于大佬们来说,这确实不是个问题,我简单写一下如何解决的,给新手小白一个参考避坑。
按照楼主说的,先对4处进行修改。然后,需要先对stub进行编译,也就是在对amd64-linux.elf-main.cpp进行修改后,需要使用stubtools进行编译,生成新的loader,然后再对compress.cpp和p_lx_elf.cpp进行修改并编译upx,这样,新生成的upx.out就可以正常压缩楼主提供的demo了。
2024-7-4 08:18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
50
Vantler 修改入口点代码的部分,修改.h文件是不行的,或者说只修改那三个部分不行。那个长度常量后面还跟着两个校验值也会变,并且代码长度也不是固定增加5字节,具体取决于编译器生成的bin文件。生成h文件的逻辑在s ...
这个怎么bin2h.py怎么编译src/amd64-linx.elf-fold.S 呢?
2024-11-11 13:44
0
游客
登录 | 注册 方可回帖
返回
//