首页
论坛
课程
招聘
[原创]记一个简单未知壳的脱壳笔记和脚本
2018-4-5 15:28 10891

[原创]记一个简单未知壳的脱壳笔记和脚本

2018-4-5 15:28
10891

环境:

win7 32

工具:

PEID,OD,improtREC

查壳

  • 先用PEID扫了一下发现什么都没有扫到
    图片描述

直接先用OD打开看一下

  • 发现有pushad/fd先用ESP定律下断试一下
  • 或者也可以单步F7遇到循环就跳也能出去,这种简单的壳这样做是可取的
    图片描述
  • 嗯,直接就这样到了,F7几下就到了OEP
    图片描述
  • 这里有个sub esp,0x58所以应该是Delphi写的,第一个call本来应该显示getversion的,但是并没有,发现它IAT加密了
    OEP是47148B
    图片描述
  • 那我们先跟进去看一下
  • 这里有对ebx一个sub和add运算看了一下发现它获取到了GetVersion的地址
    图片描述
  • 但是0x475080还是它WriteIAT的地址,所以在这里下硬件写入断点,然后重新运行寻找它GetAPIAddr(获取API地址的地方)
    图片描述
  • F9了两次发现这个地方像是写入IAT的地方
    图片描述
    那这个1D0897应该是WriteIATAddr了

    这个时候有两种办法

  1. 一直单步F7找到它循环的规律寻找它是在哪获取到函数地址的
    图片描述
    2.在0x1D0895这个地方下断用run跟踪F7跑一下(因为第一种方法没什么通用规律可言,只能一步一步跟踪,所以就详述第二种方法了,但是单步F7总是万能的^.^)
    run跟踪的原理就是模拟操作然后全部记录在run跟踪窗口中
    图片描述
  • 在写入iat的地方下断点,然后run跟踪,运行到下一次写入的时候就会断下来
    图片描述
  • 然后进run跟踪的界面,找到7*开头往这个eax里面写入的地址就是GetAPIAddr了
  • 可以看到这里获取到了API的地址
    图片描述
  • 这个地方就可以用了,也可以再往上找一下eax是从哪来的
  • 找到eax是从这个地方获取的
    图片描述
    1D1914或者1D0474
    我们写脱壳脚本的时候GetAPI用这两个地址都可以
// 定义变量,初始化变量 
VAR dwGetAPIAddr 
VAR dwWriteIATAddr 
VAR dwOEP VAR dwTmp 

MOV dwGetAPIAddr, 001D0474    // 获取 API 地址的地方      
MOV dwWriteIATAddr, 001D0897  // 填充 IAT 的地方 
MOV dwOEP, 0047148B            // OEP

// 清理环境 
BC    // 清理软件断点 
BPHWC  // 清理硬件断点 
BPMC  // 清理内存断点 

// 设置断点 
BPHWS dwOEP, "x" 
BPHWS dwGetAPIAddr, "x" 
BPHWS dwWriteIATAddr, "x"

// 构造循环 
LOOP1:  

// 运行程序 
RUN 

// 判断 是 获取 API 地址的地方 
cmp eip,dwGetAPIAddr 
JNZ SIGN1 

MOV dwTmp, eax 
jmp LOOP1  

// 判断 是 填充 IAT 的地方 
SIGN1: 

cmp eip,dwWriteIATAddr 
JNZ SIGN2  

MOV [edx],dwTmp 

jmp LOOP1  
// 判断是 OEP ,结束了 
SIGN2: 
cmp eip,dwOEP 
JZ EXIT1 

jmp LOOP1  // 脚本结束 

EXIT1: 

MSG "yes,今晚吃鸡!"

我的脚本编译方式

图片描述

  • 等脚本跑完 修复完导入表

    从OEP处将程序dump出来

    图片描述

    然后用imporREC修复一下dump出来程序的导入表就可以了

    图片描述

    完成

    图片描述
小白入坑,有不对之处请指正,谢谢^.^!!

致谢!

谢谢15PB老师们的辛勤栽培!!


[看雪官方]《安卓高级研修班》线下班,网课(12月)班开始同步招生!!

最后于 2019-5-24 18:09 被从黎明到衰落编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (19)
雪    币: 3014
活跃值: 活跃值 (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大道在我 活跃值 2018-4-5 20:45
2
0
不错    有收获
雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2018-4-5 20:57
3
0
大道在我 不错 有收获[em 4   6]
最后于 2018-4-5 20:57 被从黎明到衰落编辑 ,原因:
雪    币: 102
活跃值: 活跃值 (216)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
xiaohang 活跃值 3 2018-4-9 09:58
5
0
继续努力啊
雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2018-4-9 10:30
6
0
xiaohang 继续努力啊[em_13]
谢谢鼓励!
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
米捉鸡 活跃值 2018-4-10 09:49
7
0
“2.在0x2F0895这个地方下断用run跟踪F7跑一下(因为第一种方法没什么通用规律可言,只能一步一步跟踪,所以就详述第二种方法了,但是单步F7总是万能的^.^)”
这里下断点的地址应该是0x1D0895吧?
雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2018-4-10 10:26
8
0
米捉鸡 “2.在0x2F0895这个地方下断用run跟踪F7跑一下(因为第一种方法没什么通用规律可言,只能一步一步跟踪,所以就详述第二种方法了,但是单步F7总是万能的^.^)” 这里下断点的地址应该是0x1 ...
嗯!是的谢谢指正,已修改
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
米捉鸡 活跃值 2018-4-10 10:55
9
0
从黎明到衰落 嗯!是的谢谢指正,已修改[em_13]
大佬,你给的脱壳的代码要怎么编译啊?masm吗?
雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2018-4-10 21:19
10
0
米捉鸡 大佬,你给的脱壳的代码要怎么编译啊?masm吗?
可以用asm,或者保存为txt文本也可以,我的脚本编译方式已经贴图到脚本代码下面
最后于 2018-4-10 21:22 被从黎明到衰落编辑 ,原因:
雪    币: 423
活跃值: 活跃值 (77)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
养乐多A 活跃值 2018-10-20 01:43
11
0
我以为科锐学员发的呢  看到下面一看15pb
雪    币: 423
活跃值: 活跃值 (77)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
养乐多A 活跃值 2018-10-20 01:44
12
0

最后于 2018-10-20 01:45 被养乐多A编辑 ,原因: 发错了
雪    币: 42
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qmxsyypu 活跃值 2019-5-19 14:17
13
0


请问楼主,这怎么解决,直接跑你的脚本,出来还是加密的,这就是入口OEP吗?那请问怎么解决,然后我跟着后续步骤,用importREC修复也不成功,生成的exe也不能跑
雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2019-5-20 11:07
14
0
mb_qmxsyypu 请问楼主,这怎么解决,直接跑你的脚本,出来还是加密的,这就是入口OEP吗?那请问怎么解决,然后我跟着后续步骤,用importREC修复也不成功,生成的exe也不能跑
嗯,是的你按一下Ctrl+A
雪    币: 42
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qmxsyypu 活跃值 2019-5-20 22:26
15
0
从黎明到衰落 嗯,是的你按一下Ctrl+A
好的,谢谢
雪    币: 143
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
采臣·宁 活跃值 1 2019-5-21 16:41
16
0
雪    币: 42
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qmxsyypu 活跃值 2019-5-23 15:43
17
0
最后一个问题,我的系统是Win 8  X64。出现这个错误。是什么Win 8不能脱壳吗?

雪    币: 4517
活跃值: 活跃值 (77)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
从黎明到衰落 活跃值 1 2019-5-23 22:33
18
0
mb_qmxsyypu 最后一个问题,我的系统是Win 8  X64。出现这个错误。是什么Win 8不能脱壳吗?
最后于 2019-5-24 17:31 被从黎明到衰落编辑 ,原因:
雪    币: 630
活跃值: 活跃值 (68)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Hasic 活跃值 2019-7-15 02:59
19
0
从黎明到衰落 mb_qmxsyypu 最后一个问题,我的系统是Win 8  X64。出现这个错误。是什么Win 8不能脱壳吗?
MOV dwGetAPIAddr, 001D0474    // 获取 API 地址的地方     
MOV dwWriteIATAddr, 001D0897  // 填充 IAT 的地方
这两个地址是 virtualalloc动态分配的,每次启动的地址都不一样
分配内存的代码在
0047A37D | FFD0                     | call eax                                             |调用virtualalloc
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
似水、流年 活跃值 2019-11-13 22:07
20
0
不成功 用F7从头跑到尾成功了 比你这方法好多了
游客
登录 | 注册 方可回帖
返回