首页
社区
课程
招聘
奇怪的重定位问题(提问修正过)
发表于: 2006-4-30 08:57 6991

奇怪的重定位问题(提问修正过)

2006-4-30 08:57
6991
我有2个web组件 都是dll 加了两层壳  一层是aspack 还有1层是upx  。
aspack我用aspackdie自动脱壳了。然后,手动脱upx,两个dll脱壳测试ok没问题。

但是这2个dll不能同时工作,一个能用,另一个必定不能用,后来发现两个dll都使用的基址相同,两个dll重定位我都修复了啊,并且能在别的电脑上跑,发现地址被占用,为什么就没重定位啊,这是什么问题啊?  是不是aspackdie脱壳也要修复重定位 然后再脱upx壳?

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

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 47147
活跃值: (20405)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
肯定是你重定位表没修对,关键是UPX这层,你尽量用“upx -d 文件名”来脱(注意UPX版本)
2006-4-30 09:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
完全参照fly的《用Ollydbg手脱UPX加壳的DLL》 重定位的确定 是通过edi的变化值 确定后用winhex拷贝出来,然后用upxangle处理的,这样的操作已经很多次了(50<n)  生成的代码考会文件,空白区也检查过,没有覆盖任何代码(我一般放在UPX1段的后面) 然后修改重定位 rva    我脱壳的文件VOffset 和 ROffset是相同的,是不是我之前的操作就有问题。
2006-4-30 09:15
0
雪    币: 47147
活跃值: (20405)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
最初由 bney 发布
然后用upxangle处理的,这样的操作已经很多


很不幸,upxangle不完善,文件大些,也许修复的数据有问题的。
你还是想办法用UPX自身来脱。
2006-4-30 09:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
老大 我该怎么处理呢 我用relox也没法修复,刚脱第一层aspack壳出来的dll,没法load 2份到dll_loadEx 对于relox修复重定位 还是一知半解。

bs:我的文件是很大,有15M
2006-4-30 09:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我用dreamtheater的upx ShellEx修复了一个dll,现在2个dll都能用了, 但是需要先启动upx shellex修复的dll,让它占用默认的基址,另外一个我手脱的dll 才会实现重定位 自动使用不同的基址。

由于其中一个文件很大,upx shellEx也无法修复, 我不是想破解什么,几个月来,原先的目的已经改变, 目前我只想知道为什么会这样,怎样控制它的运行。
去年也是做到这里停下了,幸好有了upx shellEx 但是他在处理某些变形壳,文件比较大时也不理想,但这个确实是我用到现在最好的upx脱壳工具。

大文件的upx变形壳 该怎么处理呢 老大?


这里是我搞错了,一个dll是upx ShellEx脱的,还有一个是原版的。所以,才会出现以上现象。
事实上只要是被脱过的dll 无论是upx ShellEx脱的 还是我手工脱的,只能运行一个。
2006-4-30 09:39
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
花点时间把重定位表看明白
这跟UPX没啥关系
2006-4-30 09:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
原理我明白,但是大文件的变形的upx壳该怎么处理?论坛上没见过类似的介绍,脱壳工具也无能为力,自己写一个upxangle?我目前还没这么大能耐。
2006-4-30 09:55
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我用dreamtheater的upx ShellEx修复了一个dll,现在2个dll都能用了, 但是需要先启动upx shellex修复的dll,让它占用默认的基址,另外一个我手脱的dll 才会实现重定位 自动使用不同的基址。

你用upx ShellEx的dll和你另一个手脱的dll基础是否一样,如果基础不一样,那可能没有发生重定位的事

[QUTOE]由于其中一个文件很大,upx shellEx也无法修复, 我不是想破解什么,几个月来,原先的目的已经改变, 目前我只想知道为什么会这样,怎样控制它的运行。
去年也是做到这里停下了,幸好有了upx shellEx 但是他在处理某些变形壳,文件比较大时也不理想,但这个确实是我用到现在最好的upx脱壳工具。
大文件的upx变形壳 该怎么处理呢 老大?[/QUOTE]
文件太大就手脱

确定你的重定位表是否修对了
2006-4-30 10:05
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
最初由 bney 发布
原理我明白,但是大文件的变形的upx壳该怎么处理?论坛上没见过类似的介绍,脱壳工具也无能为力,自己写一个upxangle?我目前还没这么大能耐。


大文件变形的upx 还是upx
小文件正常的upx 还是upx
大文件upx压的dll要修重定位表
小文件upx压的dll也要修重定位表
2006-4-30 10:06
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
一般如果只是自己用的话, 并且这个dll确认不会被一个应用程序重复加载, 在壳处理重定位时,给它一个没人用的高地址就行了.
2006-4-30 10:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我处理重定位是用upxangela的  怎么在处理的时候使用高位地址 愿闻其详。
2006-4-30 10:11
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
随便贴一个upx  的dll
007A6446      83C7 04           add edi,4
007A6449      8D5E FC           lea ebx,dword ptr ds:[esi-4]
007A644C      31C0              xor eax,eax
007A644E      8A07              mov al,byte ptr ds:[edi]
007A6450      47                inc edi
007A6451      09C0              or eax,eax
007A6453      74 22             je short mchset.007A6477
007A6455      3C EF             cmp al,0EF
007A6457      77 11             ja short mchset.007A646A
007A6459      01C3              add ebx,eax
007A645B      8B03              mov eax,dword ptr ds:[ebx]
007A645D      86C4              xchg ah,al
007A645F      C1C0 10           rol eax,10
007A6462      86C4              xchg ah,al
007A6464      01F0              add eax,esi  //重定位以当前基础
007A6466      8903              mov dword ptr ds:[ebx],eax
007A6468    ^ EB E2             jmp short mchset.007A644C
007A646A      24 0F             and al,0F
007A646C      C1E0 10           shl eax,10
007A646F      66:8B07           mov ax,word ptr ds:[edi]
007A6472      83C7 02           add edi,2
007A6475    ^ EB E2             jmp short mchset.007A6459
007A6477      61                popad
007A6478    - E9 27D7FEFF       jmp mchset.00793BA4

这段就是upx自己对dll进行重定位, 把那个地方改到没人用的比如56780000
然后dump出来,基础改56780000就行了.确认没人和你抢那
2006-4-30 10:18
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
这里可以抓出所有需要重定位的地址
只是upx以自己的方式实现了
你了解重定位表的话,把这些地址修成标准PE格式的重定位表
这样修复重定位表绝不会错了
2006-4-30 10:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
用 "dump partial" 然后输入重定位处理的起始地址(即在007A645B的edi的值)然后是size值(重定位处理完毕时的edi值减去重定位处理的起始地址)  然后我怎么做? 这段代码还是要处理的吧?
2006-4-30 11:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
顺便说一下 我用relox修复重定位, 两个dll比较差别老是为零 郁闷坏了。
2006-4-30 11:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
你用upx ShellEx的dll和你另一个手脱的dll基础是否一样,如果基础不一样,那可能没有发生重定位的事


用pe_load察看 两个dll的基址都是相同的。
运行upx ShellEx处理过的dll,再运行原版的dll,一切正常。
运行原版的dll,再运行upx ShellEx处理过的dll,只有我手脱的dll能正常工作,另外一个由于基址被占用,系统提示此组件没有安装。

bs:以上的2个dll是不同的两个组件,都被加了2层壳
2006-4-30 13:57
0
雪    币: 446
活跃值: (758)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
自己写工具修复重定位
2006-4-30 16:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
要是会就好了
2006-4-30 19:47
0
游客
登录 | 注册 方可回帖
返回
//