1 查看壳程序信息

  • 使用ExeInfoPe

分析:

发现这个壳的类型没有被识别出来,Vc 6.0倒是识别出来了,Vc 6.0的特征是 入口函数先调用GetVersion()

2 用OD找OEP

  • 拖进OD

发现 这个壳和我们的正常程序很像。但是并不是我们的真正程序入口

  • 因为vc6.0特征的第一个调用的是GetVersion(),给GetVersion()下 硬件断点

//第一次断下来,但是根据栈回溯,调用者并不是我们的模块

//第二次断下来,就应该是了

//找到入口后 栈上右键 反汇编窗口跟随

//如下

  • 在OD看内存布局,一般.rdata的最前面是放的IAT,而且OD数据窗口默认就是.rdata的起始位置。

    • 也可以点一个call /jmp  [];看一下来找IAT表

  • 对那个地方下一个硬件写入断点 --DWORD,即当前面的壳程序在修改的时候就能段下来找到壳的加密算法的地方

3 对加密部分分析

这个分析的过程,需要自己去啃是分享不了的。

我是从GetProcAddress 开始分析的,过程中往前观察分析了几次来解答这里的一些寄存器的内容信息、局部变量的信息,以下是我主要分析的部分:

  • 通过对IAT表位置下硬件写入断点,我们找到了这个修改IAT的地方

断下这个GetProcAddress()这个函数 调用之后EAX保存的是 当前要填入IAT的真实地址

004385B9    FF15 CC924300      CALL DWORD PTR DS:[0x4392CC] ; kernel32.GetProcAddress

//开始怀疑修改进IAT的函数内容--加密代码前面几句--写死的硬编码opcode 到底意欲何为:

在内存窗口跳到[EBX-0X30]选择反汇编观察一下:

  • 发现 这就是解密IAT代码。

总结:用硬编码 opcode (用于解密IAT)的首地址替代IAT中的函数地址,然后每次IAT调用的时候都会去调用这个代码块使用。

4 分析了加密算法了流程后

  • 这时候我们只需要保存正确的函数地址值到IAT,那么这个程序就能脱掉了。

然后和前面几篇一样的流程dump到本地,用impREC修复一下IAT

运行没毛病!!

附:还可以使用OD脚本修正IAT

思路:

  1. 调用getprocAddress之后,立刻使用一个临时变量保存起来,

  2. 再待壳修改IAT后,立刻修改回正确的函数地址(前面保存的临时变量)

脚本如下:

//.定义变量
MOV dwGetApiAddr,004385bf
MOV dwWriteAddr,004385f0

//.初始化环境
BC //清除软件断点
BPHWC //清除硬件断点
BPMC //清除内存断点

//下硬件执行断点

BPHWS dwGetApiAddr,"x"
BPHWS dwWriteAddr,"x"
BPHWS  dwOEP,"x"

//.构建逻辑
/*
 -- 用一个临时变量来存储 真正的函数地址
 -- 在加密逻辑代码执行完,并且写入IAT后,立刻改回
*/
LOOP0:
  RUN //相当于od -- F9
  CMP  dwGetApiAddr,eip//如果是执行完GetProcAddress后
  JNZ CASE1
  mov dwTemp,eax
  JMP LOOP0    

CASE1:
  CMP dwWriteAddr,eip
  MOV [edi],dwTemp
  JMP LOOP0  

CASE2:

  CMP dwOEP,eip
  JNZ LOOP0  

  MSG "改回来了哈哈"

脱壳系列_2_IAT加密壳_详细版_解法1_包含脚本的更多相关文章

  1. 脱壳系列_2_IAT加密壳_详细版解法1(含脚本)

    1 查看壳程序信息 使用ExeInfoPe 分析: 发现这个壳的类型没有被识别出来,Vc 6.0倒是识别出来了,Vc 6.0的特征是 入口函数先调用GetVersion() 2 用OD找OEP 拖进O ...

  2. 脱壳系列_0_FSG壳_详细版

    ---恢复内容开始--- 1 查看信息 使用ExeInfoPe查看此壳程序 可以看出是很老的FSG壳. 分析: Entry Point : 000000154,熟悉PE结构的知道,入口点(代码)揉进P ...

  3. 脱壳系列(一) - CrypKeySDK 壳

    程序: 运行 用 PEiD 载入程序 PEid 显示找不到相关的壳 脱壳: 用 OD 载入程序 这个是壳的入口地址 因为代码段的入口地址为 00401000 这三个是壳增加的区段 按 F8 往下走程序 ...

  4. 脱壳系列(五) - MEW 壳

    先用 PEiD 看一下 MEW 11 1.2 的壳 用 OD 载入程序 按 F8 进行跳转 往下拉 找到这个 retn 指令,并下断点 然后 F9 运行 停在该断点处后再按 F8 右键 -> 分 ...

  5. 脱壳系列(四) - eXPressor 壳

    先用 PEiD 查一下壳 用 OD 载入程序 这里有一串字符串,是壳的名称和版本号 按 Alt+M 显示内存窗口 这里只有三个区段,后面两个是壳生成的,程序的代码段也包含在里面 利用堆栈平衡 按 F8 ...

  6. 脱壳系列(二) - EZIP 壳

    程序: 运行程序 用 PEiD 查壳 EZIP 1.0 用 OD 打开 按 F8 往下走 这个看似是 OEP 的地方却不是 OEP 因为代码段从 00401000 开始 可以看到,壳伪造了 3 个区段 ...

  7. CleanMyMac 4破解版-最强中文版_破解版_激活码_注册码

    最新版CleanMyMac 4中文版本已经发布了,也受到了广大用户的喜爱.众所周知, 注册码是开启软件的钥匙,在获取软件安装包之后需要有效的注册码才能激活软件.但是关于CleanMyMac 4注册码的 ...

  8. CleanMyMac 3.7.5最强中文版_激活码_破解版_下载_注册码

    版权归作者所有,任何形式转载请联系作者.作者:缘来远去(来自豆瓣)来源:https://www.douban.com/note/612586476/ 最新版CleanMyMac 3中文版本已经发布快要 ...

  9. 脱壳系列—— 揭开so section加密的美丽外衣

    i春秋作家:HAI_ 0×00 前言 对so的加密,https://bbs.pediy.com/thread-191649.htm大神的帖子里已经很详细的说明了.当然加密不是我们研究的重点,如何搞掉这 ...

随机推荐

  1. centos 5.5版本中添加ext4格式

    1.我在使用centos 5.5版本做练习的时候发现默认是不支持ext4文件格式. 在添加硬盘后,用fdisk -l 查看到信息如下: 分区完后,使用命令:mkfs -t ext4 /dev/sdb会 ...

  2. 我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅

    标题:我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅 作者:Lamond Lu 大家好,我是陆楠,来自北京盛安德青岛分公司,今年非常有幸作为讲师参加了微软Insider ...

  3. CentOS7 搭建gitlab服务器

    本文介绍如何在CentOS7.2上搭建Gitlab服务器,并简单介绍如何使用. Preface 使用的是CentOS7.2的操作系统,安装当前最新版Gitlab服务器,下载地址:清华大学开源软件镜像站 ...

  4. Java:HashMap原理与设计缘由

    前言 Java中使用最多的数据结构基本就是ArrayList和HashMap,HashMap的原理也常常出现在各种面试题中,本文就HashMap的设计与设计缘由作出一一讲解,并解答面试常见的一些问题. ...

  5. python argparse模块的使用

    import argparse def get_parse(): # 初始化 parse = argparse.ArgumentParser() # 添加选项,类型为str,默认为空 parse.ad ...

  6. Linux嵌入式kgdb调试环境搭建

    ======================= 我的环境 ==========================PC 端: win7 + vmware-15 ubuntu16.04开发板:Freesca ...

  7. C#8.0: 在 LINQ 中支持异步的 IAsyncEnumerable

    C# 8.0中,提供了一种新的IAsyncEnumerable<T>接口,在对集合进行迭代时,支持异步操作.比如在读取文本中的多行字符串时,如果读取每行字符串的时候使用同步方法,那么会导致 ...

  8. 用SpringBoot+MySql+JPA实现对数据库的增删改查和分页

    使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页      JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述 ...

  9. 《Predict Anchor Links across Social Networks via an Embedding Approach》阅读笔记

    基本信息 文献:Predict Anchor Links across Social Networks via an Embedding Approach 时间:2016 期刊:IJCAI 引言 预测 ...

  10. Oracle修改字段类型报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”

    在oracle修改user表字段name类型时遇到报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”,是因为要修改字段的新类型和原来的类型不兼容. 如果要修改的字段数据为空时,则不会报 ...