首页
社区
课程
招聘
[原创]利用EXE中的数据与代码
发表于: 2010-5-21 11:02 16216

[原创]利用EXE中的数据与代码

2010-5-21 11:02
16216

某日,逆向一EXE(这里命名它为HH),发现内部使用了Rijndael-256,以及某个不知名的算法。
从网上找到N个相关AES算法的实现,结果密码表是一样了,但运行结果却怎么都不一样。
由于实在对AES头晕,再加上还有某个不知名的算法(内部流程复杂),所以考虑需要利用这个EXE的加解密实现。
可是EXE不是DLL,没有重定位表。不能像DLL一样Load一下,直接CALL就能用。
怎么办?把EXE当DLL使?修正重定位信息?网上找了找,基本是这个说法,但说法的后面,也明确指出:依然不足,修正重定位信息是件苦力活,还容易出错。
而且,N个地方需要重定位,这一路做下来,不吐血也脑溢血了。
考虑考虑怎么取巧吧。
思路:
  首先,自己写的利用程序(这里命名它为CC)是可以设置有重定位信息的,所以可以让出EXE的默认加载位置。
  把HH放在400000位置,嘿嘿,重定位不就省了?
。。。
说得容易,实现一下看看?指定CC加载到别处,设置重定位,MapViewOfFileEx把HH加载到0x400000。
报错?不行?不行!
什么错?目标位置已被使用,无法加载?!
OD看看,果然,让出来的茅坑让系统给用了。
再想:
  由于茅坑让出来了,系统就认为是无主的,爱怎么用,用多少,咱管不到。
  就算这个茅坑系统没有使用,万一HH屁股比较大,需要连坐N个坑,那就保不齐系统把后面坑占走,害HH屁股装不下了。。。
  如何通知系统留着坑哩?
试着手工打造一个占坑PE。试来试去,不尽人意。
又想:
  最好的办法是让HH自己占。
  可是HH自己占坑就得运行,我们只想使用数据与代码,不想它运行起来。
  于是需要改造HH入口。
  由于HH入口承接着主线程,不能让它结束。正好,把主线程转移给CC。
  用LoadLibrary加载CC。
  LoadLibrary加载PE文件,找到PE入口,并把入口视作DLLMain,以DLL_PROCESS_ATTACH为参数调用之。
  所以不管你是EXE还是DLL,入口总能得到运行。
  如此,主线程将被交付CC。
试试呗。
实现CC,内部使用HH的绝对地址。当然,这样CC程序是不能独立运行的。
修改HH入口,指定加载CC。
不成功?CC无法加载。
其实是小问题,用LordPE把CC的Characteristics加上DLL标志。
再来,成功了!!!成功利用了HH内部数据与代码!!!

好,再分析一下细节:注意到可能CC与HH的子系统不同,所以需要统一子系统。
另外,如果HH加过壳,这个方法就不能直接使用了。虽然俺不大会脱,但总有牛人会脱,脱了壳再应用,一样一样的。

给出实现DEMO:


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

收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 7080
活跃值: (4020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强大,顶.....
2010-5-21 12:01
0
雪    币: 260
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
换个思路可能更简单,就让HH运行起来,自己要实现啥做到DLL中,注入DLL。EXE里面的函数和代码不就随便给你用了,哈哈。游戏外挂不就经常调用游戏的CALL啥的,很成熟的方案!
2010-5-21 12:49
0
雪    币: 364
活跃值: (91)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
不错啊 太强了!! 可能会成为精华贴。
楼上说的是外挂用的方法 但是LZ的更好   LZ的原程序是不运行的!
2010-5-21 14:16
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
5
是的,本文的目的不是实现外挂。主要就是不让原程序运行,而只让副程序运行。
所谓“借尸还魂”或者叫“鬼上身”都比较贴切。嘿嘿。
2010-5-21 15:02
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
6
我以前写了个小程序,可以获取PE文件内大部分需要重定位的地址,一些SDK程序还是可以跑起来的。
上传的附件:
2010-5-21 17:47
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

用LoadLibrary加载CC。
LoadLibrary加载PE文件,找到PE入口,并把入口视作DLLMain,以DLL_PROCESS_ATTACH为参数调用之。
所以不管你是EXE还是DLL,入口总能得到运行。
如此,主线程将被交付CC。


DLL_PROCESS_ATTACH的作用是什么?是不是相当于调试了?
2010-5-22 14:52
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
8
利用exe中的数据和代码

利用jpg文件中的数据和代码

利用txt中的数据和代码

忽忽  楼主做个专题把
2010-5-22 15:08
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
现在也做这方面的研究,但与楼主的研究有些区别,
我的HH是一个独立的可执行EXE,CC也是一个可独立运行的EXE程序,所不同的是,CC可以使用HH的导出函数,现在有个问题,当CC中的导出函数没有使用窗口函数、API和系统资源时可以正常被CC调用使用,否则不能正常运行。
楼主的方法值得借鉴!
2010-6-13 22:16
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主经过你处理,HH和CC还能独立运行吗?
2010-6-13 22:35
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
和楼主学习了。都是大牛啊!也不知道什么时候能赶上你们?!
2010-6-14 00:30
0
雪    币: 239
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
虽然看不明白。

继续学习,争取有一天看明白。
2010-6-21 15:10
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
特别申明:
其实没有必要那么麻烦,你只要把EXE运行起来,然后用DLL注入到EXE进程,再调用相应的函数就行了,你这个是调用某个函数,如果函数中使用了一些全局对象,就会不正确了.
2010-6-28 17:15
0
雪    币: 209
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
方法多了去了。。。。
2010-6-28 21:31
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
15
十分荣幸,xiongshi兄弟2007年潜水至今第一帖回复到了这里。。。
让我再次向你解释:原EXE是不运行的。比如:我有一个病毒,只是想利用内部的算法,那不可能让它运行起来让我插DLL吧。。。
而经过处理后的CC也是无法独立运行的,需要由经过处理的HH加载之。除了某些需要初始化的全局对象无法处理。那些静态的全局函数与数据,包含API调用等等,都保持原有状态与位置。使用不会出错。
谢谢
2010-6-28 21:44
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
既然是算法 问题  而且还有人说 方法多了去了
真的支持楼主 搞个 专题 交流  虽然 高手不屑一顾
但是可以帮住  新人 吸收知识  积累经验啊
2010-6-28 22:01
0
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
在CreateProcess里面指定CREATE_SUSPENDED,让他挂着,然后再注入dll不是一样的效果吗
2010-6-28 23:23
0
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
楼主思路值得学习啊!
2010-6-28 23:24
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好强大,好思路~~!!!学习啦
2010-6-30 17:14
0
雪    币: 327
活跃值: (1247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主的思路可以利用到很方面的应用,好思路。
2010-6-30 18:15
0
雪    币: 86
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
nbw的秘密武器真多啊
2010-6-30 19:36
0
雪    币: 97697
活跃值: (200764)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
22
Support.
2010-6-30 19:47
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
23
学得一招是一招,讲办法多了去的一般都语焉不详更不愿来个demo/tut
2010-6-30 20:04
0
雪    币: 488
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
netline.h是什么文件?
2010-6-30 20:21
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
新的思路,支持一下
2010-7-3 16:00
0
游客
登录 | 注册 方可回帖
返回
//