逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构
逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构
一丶熟悉IDA,以及手工制作sig文件.
IDA,静态分析工具,网上随便找一个即可下载.
首先,我们写一个可执行EXE,最简单的
使用IDA打开.
1.提示使用什么格式打开
因为是PE格式,所以我们选择PE即可.点击OK
2.重新打开一下
如果以前已经打开过这个PE,那么重新打开,则会显示这三个按钮,
1.overwrite 重新写入,代表覆盖以前的.(联系中常用这个,工作中不常用)
2.load existing 加载已经存在,这个很常用,因为有的时候汇编的注释很多,或者样本分析不会是一天完成,那么加载这个已经存在的即可.
3.取消.
3.打开后显示的视图
这个视图是罗列出函数的逻辑.
我们不看这个,主要是看汇编代码.
1.切换到汇编代码
右键,点击Text View
2.查看汇编代码.
这里有代码提醒功能,那么我们要学会怎么做,IDA是读取.sig文件,然后显示出来的.
那么我们要学会怎么做.
二丶制作.sig文件.让IDA显示.
制作.sig文件,我们依赖于一个VC自带的工具,还有特征提取工具.
1.VC 自带的lib.exe
2.特征提取工具pcf.exe
都会打包.
第一个,我们首先手动制作一个.sig文件.
1.熟悉什么是特征,以及特征是什么.
先熟悉一下特征是什么
首先上图看到,我们已经显示出来了system这个库函数了,那么是怎么显示的? IDA读取sig文件,但是读取sig文件也要有特征匹配才会显示.
首先我们双击system,进去查看它的汇编,以及二进制代码.
默认是没有机器码的,所以我们要显示出来机器码.
Options(选项) - > General(一般)
然后出来下图
只需要在画红色方框的地方,写入大小,则会显示机器代码多少
特征就是固定的二进制代码, 注意,是固定的二进制代码,打死都不会变的.
比如上面的push ebp的机器代码,是55
但是注意,偏移不是,比如最后的一个红框后面的偏移,因为这个受很多因素干扰.
2.使用lib.exe提取obj文件出来.
注意,因为printf是属于libc.lib中,所以直接把libc.lib的obj提取出来
这里我的环境变量已经配置好了,可以直接使用CMD命令行了,注意,如果你没有配置,请网上搜索配置的方法.
vc的lib.exe目录所在文件.
vc98 -> bin ->lib.exe, 这里给的是一部分,因为我不知道你的vc在哪里装着,所以这个是不会变的.
而libc.lib所在的文件路径,也是在vc98下面,只不过不是bin了,变成了lib了
首先lib工具的使用命令
1.遍历lib中所有obj的文件
lib /list xxx.lib
2.lib.exe提取obj文件出来.
命令:
lib /extract: xxxxx.obj lib文件名
比如上面随便提取一个
lib /extract: build\inter\st_obj\xxxxx.obj libc.lib
3.使用pcf.exe(特征提取工具)
这个工具要自己去下载.
官方网址: http://www.hex-rays.com/products/ida/support/ida/flair61.zip
需要用户名和密码
当然也会打包,只不过版本比较低.
首先,使用pcf文件,生成一个.obj文件的特征码.结尾是.pat
命令:
pcf xxxx.obj
查看特征码格式.
前边都是机器码,后面的2E 2E 2E 2E...代表的是偏移什么的,反正就是做补充的.
比如机器码
55
68
FF 25 00 00 40 00
那么写到文件中就是55 68 FF 2E 2E 2E 2E 2E 2E 2E 2E
其中两个2E代表一个.
四丶生成.sig文件.
这个会用到sigmake的工具
命令 sigmake xxxx.pat xxxx.sig
举例子:
sigmake printf.pat printf.sig
那么生成的文件就是printf.sig
只需要把这个文件拷贝到IDA目录下的sig目录下即可.然后使用IDA的时候我们需要简单设置一下.
命令就是上面那个命令
制作完成之后拷贝到IDA的sig目录下.
然后打开IDA, 快捷键Shift + F5
出来下面的界面
那么现在我们右键,添加我们的sig文件进去即可.这个时候我们的printf就可以显示了.
添加进去
点击OK即可.
此时我们的printf就已经显示出来了.
上面只是一个简单的.生成一个,当然可以写脚本生成很多个.
当然也有脚本,脚本使用方法.(.bat)
脚本名称 libc
注意不是libc.lib
可以一键升成libc库中的所有.sig
课堂资料: 链接:http://pan.baidu.com/s/1boN2Zvx 密码:rfag
作者:IBinary
出处:http://www.cnblogs.com/iBinary/
版权所有,欢迎保留原文链接进行转载:)
逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构的更多相关文章
- 逆向知识第一讲,IDA的熟悉使用
逆向知识第一讲,IDA的熟悉使用 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打开. 1.提示使用什么格 ...
- 逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复 首先我们要知道这个OD的Bug是什么. 我们调试一个UNICODE的窗口,看下其窗口过程. 一丶查看OllyDbg 的Bug 1.1spy++ ...
- 内核开发知识第一讲.内核中的数据类型.重要数据结构.常用内核API函数.
一丶内核中的数据类型 在内核中.程序的编写不能简单的用基本数据类型了. 因为操作系统不同.很有可能造成数据类型的长度不一.而产生重大问题.所以在内核中. 数据类型都一定重定义了. 数据类型 重定义数据 ...
- 逆向知识第九讲,switch case语句在汇编中表达的方式
一丶Switch Case语句在汇编中的第一种表达方式 (引导性跳转表) 第一种表达方式生成条件: case 个数偏少,那么汇编中将会生成引导性的跳转表,会做出 if else的情况(类似,但还是能分 ...
- Linux基础知识第一讲,基本目录结构与基本命令
目录 一丶Window 与 Linux的目录结构 1.Windows 与 Linux目录简介 2.Linux目录主要作用 3.任务栏与菜单栏,与关闭按钮 二丶Linux终端与常见命令学习 1.终端中的 ...
- 逆向知识第八讲,if语句在汇编中表达的方式
逆向知识第八讲,if语句在汇编中表达的方式 一丶if else的最简单情况还原(无分支情况) 高级代码: #include "stdafx.h" int main(int argc ...
- PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式
目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- 框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解)
框架原理第一讲,熟悉常用的设计方式.(以MFC框架讲解) 一丶什么是框架,以及框架的作用 什么是框架? 框架,简而言之就是把东西封装好了,使用框架开发可以快速开发程序,例如MFC程序的双击写代码. 为 ...
随机推荐
- 201521123066 《Java程序设计》第三周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...
- 201521123054 《Java程序设计》第11周学习总结
1. 本周学习总结 2. 书面作业 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同步访问(请出现相关代码)? 使用Lock对象和Condition对象实现互斥 ...
- 【干货】教你如何利用fullPage.js以及move.js插件打造高端大气的网站效果!
前言: 如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容,显得格外的高端大气上档次. 在学习过jQuery插件之后,才发现之前的很多网站特效完全可 ...
- python之面向对象2
一.类命名空间与对象.实例的命名空间 常见一个类就会创建一个类的名称空间,用来储存类中定义的所有名字,这些名字成为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 ...
- JavaScript中的for in循环
在学习AJAX的时候,发现JavaScript中for in循环,这种循环对于遍历JSON是很好用的.于是写下了这篇博文 作用 for in循环本质上是forEach循环,它主要有两个作用 遍历数组 ...
- Mysql的基本命令图
如果看不清的,右键图片在新标签页打开! 这是经过我的整理出来的!如果有重要的再补充把-..
- Struts2第九篇【OGNL、valueStack详解】
什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认的表达式语言. 为什么我们学 ...
- Spring @RequestParam乱码问题
在网上找了很多资料才找到解决的方法,通过URL传递命名参数,后台接收的却是乱码解决方法如下: 方法一:将接收的参数重新编码 @RequestMapping(value="/handle&qu ...
- mybatis入门篇基——基本配置与参数说明
Mybatis 好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点.今天想谈谈关于mybatis的一些基础入门知识. 进入正题~~: a.关于mybatis: 我个人觉得mybatis深得 ...
- Android + HTML5 混合开发
摘要: 对于 Android + HTML5 混合开发以下的观点仅仅是我的个人观点,如果有什么不对的地方请指正 简介: 混合开发的 App(Android + HTML5)就是在一个 App 中内嵌一 ...