吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6302|回复: 12
收起左侧

[原创] 用ida脚本定位程序中对内存进行操作的汇编代码

  [复制链接]
buzhifou01 发表于 2019-11-22 20:59
1.前言
     在逆向破解中,我们有时需要利用IDA脚本来帮助我们分析程序,ida脚本语言可看成是一种查询语言,它能够以编程的方式访问ida数据库的内容,ida使用两种不同的语言来编写脚本,那么我今天要分享的是使用python脚本来获取对内存进行操作的汇编代码。
2.操作部分
2.1接下来我要对名为analyse.exe的程序进行分析,我先运行一下。
image.png

image.png
2.2接下来,我把该程序拖到ida中。在ida中打开该程序,显示的情况如下:

图1

图1


图2

图2

2.3在图1中,可以看到一个双循环,循环结构中有一个名为c的二维数组,了解背包算法的人应该都能看出,该双循环实现的是背包算法,在图2中,我们同样又看到了一个名为swapc的二维数组。
2.4在OD中打开analyse.exe程序,首先找到main函数,然后往下拖发现了第一个双循环结构也就是图1对应的双循环。

图3

图3


图4

图4


图5

图5

2.5我在双循环结束的下一行汇编代码下断,运行到此处,在图5和图4中我们看到了一个为4c6020的地址,在OD窗口中查看该地址内容及以下内容,可以看出该二维数组始于4c6020,终止于4c63bc。
image.png

image.png

image.png

image.png
2.6接下来使用脚本idapython.py找出对二维数组所在的内存区域进行操作的汇编代码并生成code1.txt文件。
image.png
image.png

image.png
2.7接下来分析swapc二维数组,该部分跟上部分差不多,我这里就不讲了。
3.idapython.py代码分析
3.1代码如下,关键语句都加了注释。
[Python] 纯文本查看 复制代码
#-*- coding:utf-8 -*-

import os #os模块用于提供系统级别的操作。
import sys  #sys模块用于提供对解释器相关的操作

def getasm(ea_from,ea_to,range1,range2):
	fp=open("code1.txt",'w')

	opcode=0
	for start_a in Heads(ea_from,ea_to): #遍历指令地址
		if isCode(GetFlags(start_a)): #判断是否为指令
			cmd=GetMnem(start_a) #获取指令名称
		
			if cmd=='mov' or cmd=="lea":
				
				opcode=Dword(NextNotTail(start_a)-4) #获取指令操作内存的内存地址
				if opcode <0:
					
					#处理mov eax,[ebp-8]指令时,[ebp-8]需要转换成[ebp+8]
					opcode=(~opcode+1) 

				Message("-->%08x  %08x \n"%(start_a,opcode))

				if range1<=opcode<=range2:

					offset_a=opcode-range1 #偏移量

					MakeComm(start_a,"//offset: 0x%04x "%offset_a) #添加注释

					fp.write("%08X %s \n"%(start_a,GetDisasm(start_a))) 
	

	fp.close()
	Message("ok")


ea=ScreenEA()
for seg in Segments(): #遍历所有的段
	if SegName(seg)=='.text': 
		getasm(seg,SegEnd(seg),0x4c6020,0x4c63bc) #把代码段的起始地址和结束地址传入

3.2算法思路:
1.首先遍历所有的段找到代码段并把地址作为参数传入
2.遍历所有对内存进行操作的mov和lea汇编指令
3.找到汇编指令后,计算偏移量
4.最后进行写入操作


附件.rar

309.76 KB, 下载次数: 26, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 9威望 +1 吾爱币 +14 热心值 +8 收起 理由
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
庚^溯 + 1 热心回复!
onething + 1 + 1 热心回复!
观山海 + 1 我很赞同!
liphily + 1 没看懂,还是赞一下先
sysgod + 1 + 1 用心讨论,共获提升!
小木曾雪菜 + 1 用心讨论,共获提升!
乘风i + 1 + 1 我很赞同!
朱朱你堕落了 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| buzhifou01 发表于 2019-11-27 11:07
柘月十七 发表于 2019-11-25 09:06
请问是用什么编译器写的汇编代码?

上面的汇编代码是用ida工具逆向分析出来
小木曾雪菜 发表于 2019-11-23 01:19
这个不错。可以熟悉一下ida脚本的操作。话说ida 7.0 python只能用2.7吗?
dutyzqly 发表于 2019-11-23 08:05
orcate 发表于 2019-11-23 08:53
谢谢大佬分享
easelong12 发表于 2019-11-23 18:26
谢谢大佬分享
观山海 发表于 2019-11-23 21:24
谢谢大佬分享
我的信仰 发表于 2019-11-23 22:18
点赞,向大佬低头
q74330 发表于 2019-11-23 23:28
熟悉一下ida脚本的操作
2Burhero 发表于 2019-11-23 23:42
哼哼哼行间距
jw188 发表于 2019-11-24 22:29
对于这个,我是一点也看不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-29 02:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表