首页
社区
课程
招聘
[原创]记一个简单未知壳的脱壳笔记和脚本
发表于: 2018-4-5 15:28 15987

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

2018-4-5 15:28
15987

win7 32

PEID,OD,improtREC

图片描述

// 定义变量,初始化变量 
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,今晚吃鸡!"
  • 先用PEID扫了一下发现什么都没有扫到
    图片描述
  • 发现有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了

    这个时候有两种办法

  • 在写入iat的地方下断点,然后run跟踪,运行到下一次写入的时候就会断下来
    图片描述
  • 然后进run跟踪的界面,找到7*开头往这个eax里面写入的地址就是GetAPIAddr了
  • 可以看到这里获取到了API的地址
    图片描述
  • 这个地方就可以用了,也可以再往上找一下eax是从哪来的
  • 找到eax是从这个地方获取的
    图片描述
    1D1914或者1D0474
    我们写脱壳脚本的时候GetAPI用这两个地址都可以
  • 等脚本跑完 修复完导入表

    从OEP处将程序dump出来

    图片描述

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

    图片描述

    完成

    图片描述
  1. 一直单步F7找到它循环的规律寻找它是在哪获取到函数地址的
    图片描述
    2.在0x1D0895这个地方下断用run跟踪F7跑一下(因为第一种方法没什么通用规律可言,只能一步一步跟踪,所以就详述第二种方法了,但是单步F7总是万能的^.^)
    run跟踪的原理就是模拟操作然后全部记录在run跟踪窗口中
    图片描述
  • 先用PEID扫了一下发现什么都没有扫到
    图片描述
  • 发现有pushad/fd先用ESP定律下断试一下
  • 或者也可以单步F7遇到循环就跳也能出去,这种简单的壳这样做是可取的
    图片描述
  • 嗯,直接就这样到了,F7几下就到了OEP
    图片描述

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

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

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


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

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