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

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

2023-1-7 11:52
48651
收藏
免费 23
打赏
分享
最新回复 (48)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_pf 2023-5-16 16:27
26
0
大佬请教下,对于修改压缩数据那里修改第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替换修改哪个文件好呢?
雪    币: 548
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
IX221 2023-5-17 09:02
27
0
感谢
雪    币: 1199
活跃值: (1399)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
luoye_ATL 2023-5-21 17:25
28
0
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
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_pf 2023-5-26 13:35
29
0
luoye_ATL 你可以看下upx3.96/src/stub目录下的Makefile文件,或者在upx3.96/src目录下执行make all,根据命令行输出查看是那个文件生成的arm_v5a_linux_elf_f ...
非常感谢~
雪    币: 10299
活跃值: (1979)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wzmooo 2023-5-26 14:29
30
0
能不能基于最新的upx写下改法呢
雪    币: 97
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Vantler 2023-6-20 17:45
31
1
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下各个架构的代码流程
雪    币: 7076
活跃值: (3488)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
bxc 6 2023-7-25 15:48
32
0

测试发现给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编辑 ,原因:
雪    币: 1199
活跃值: (1399)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
luoye_ATL 2023-7-27 14:52
33
0
bxc 测试发现给linux可执行文件加壳可以正常工作, 但给so动态库加壳不行, 看源码, 好像还需要修改amd64-linux.elf-so_main.c这个文件来实现so的解密才行.32位ARM好像是需 ...
是的,因为so库和可执行文件的布局有差异,处理文件不一样,我这里只尝试了可执行文件的加壳修改
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
bifa 2023-12-8 17:36
34
0
按照文章修改系统一样也报错 是怎么回事尼
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
bifa 2023-12-10 03:29
35
0
能不能给一份修改好的源码尼!! 大佬们!!自己改老是出错
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
骑驴找马 2024-1-30 11:58
36
0
Vantler 修改i386-linux.elf-main.c文件。可以通过观察armv5的S文件获知。armv5的S汇编码文件是空的,直接以include的方式复用armv4的S文件,所以armv5中调用的C文件代 ...
我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会报segment fault。请教请教?
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
骑驴找马 2024-1-30 15:59
37
0
weekend~ 好的,我一会试试,谢谢~
我也遇到同样的问题,你改对了吗?
雪    币: 166
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
骑驴找马 2024-1-30 16:01
38
0
骑驴找马 我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会 ...
你改好了吗,我也是一直报错~~
雪    币: 97
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Vantler 2024-2-18 11:12
39
0
骑驴找马 我修改了四处,void PackLinuxElf64::buildLinuxLoader()和void PackLinuxElf32::buildLinuxLoader()同名函数两个都修改了,还是会 ...
详细说说是修改的哪一步发生错误?前面的入口点异或正常执行没错是吗?如果单纯是压缩数据加密部分的错误,我会考虑压缩加密部分有问题,因为loader中只有一行解密代码没有多余实现,要么是前后配合有问题(例如我第一页回复中那个入口点亦或的问题),要么是前面处理逻辑有问题。我自己只遇到过入口点异或/loader两函数两种seg fault情况,其他的没遇到不好说
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_onqwmgfo 2024-3-5 00:19
40
0
如果是使用Android下的termux如何编译汇编文件呢
雪    币: 1616
活跃值: (3570)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小希希 2024-3-5 13:24
41
0
感谢分享
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_onqwmgfo 2024-3-6 09:42
42
0
Vantler 详细说说是修改的哪一步发生错误?前面的入口点异或正常执行没错是吗?如果单纯是压缩数据加密部分的错误,我会考虑压缩加密部分有问题,因为loader中只有一行解密代码没有多余实现,要么是前后配合有问题(例 ...
如何在termux更新汇编文件呢
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_whkdnwvj 2024-3-20 18:35
43
0
请问windows的怎么修改压缩呢?该修改哪个c文件?谢谢
雪    币: 97
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Vantler 2024-3-25 14:51
44
0
mb_onqwmgfo 如何在termux更新汇编文件呢
恐怕需要该那个汇编编译工具的代码,我记得里面直接调用HOME环境变量(或是个啥来着,记不清了)来定位工具位置的,termux里面修改这个变量为你的地址应该就行,但是我没试过不好说
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ijbebjep 2024-4-3 09:34
45
0
咨询下呢,我在重构stub时,提示recipe for target 'upx-stubtools-stamp failed,视乎是找不到这个工具,查了下也确实没有,不知道各位有没有碰到这个问题?
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ijbebjep 2024-4-9 10:07
46
0
有哪位大神能指导下具体怎么重编译stub啊,下载了工具也没用的,谢谢了!!!
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Eur3ka 2024-4-19 10:38
47
0
大佬想问一下最新版本的upx,windwos下的loader怎么修改,我尝试过往amd64-win64.pe.S中直接加汇编,发现加不进去。往amd64-win64.pe.h中的数组直接添加机器码,运行报错bad loader。
雪    币: 1
活跃值: (131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DessertTH 2024-7-2 10:38
48
0
骑驴找马 我也遇到同样的问题,你改对了吗?
我也是按照这个改了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'.
雪    币: 1
活跃值: (131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DessertTH 2024-7-4 08:18
49
0
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了。
游客
登录 | 注册 方可回帖
返回