前言

一个肚脑虫(Donot)APT组织的下载器样本,样本中的一些关键字符串数据需要使用指定函数进行动态解密。所以正好借此机会记录下怎么使用IDA Python脚本来解密字符串数据。使用IDA Python脚本自动化解密字符串数据对逆向分析人员来说应该是一个比较常用的功能。

myDecode为解密函数,只要将加密的字符串数据作为参数传入就能返回加密前的原字符串

对myDecode函数进行交叉引用,可以发现总共有34个地方调用了该函数

解密算法比较简单,编写解密脚本的基本思路就是通过交叉引用获取每一个加密字符串,然后通过添加注释的方式对解密后的原始字符串进行标注。

 1 _BYTE *__cdecl myDecode(const char *a1)
2 {
3 _BYTE *v2; // [esp+10h] [ebp-8h]
4 unsigned int i; // [esp+14h] [ebp-4h]
5
6 v2 = calloc(1u, 0x1Bu);
7 for ( i = 0; i < strlen(a1); ++i )
8 v2[i] = a1[i] ^ 3;
9 v2[i] = 0;
10 return v2;
11 }

下面是需要用到的几个IDA Python API函数:

1 XrefsTo                #获取交叉引用地址
2 prev_head #获取前一条指令地址
3 print_insn_mnem   #获取指令助记符
4 print_operand   #获取指令操作数
5 get_operand_value   #获取操作数地址
6 get_byte   #从指定地址获取1字节数据
7 set_cmt   #添加注释

完整脚本代码如下:

 1 import idc
2 import idaapi
3
4 def getStrAddress(addr):
5 addr = prev_head(addr)
6 if print_insn_mnem(addr) == "push" and "offset" in print_operand(addr,0):
7 return get_operand_value(addr,0)
8 else:
9 return 0
10
11 def getEncodeStr(addr):
12 out = ""
13 while(True):
14 ch = idaapi.get_byte(addr)
15 if ch != 0:
16 out += chr(ch)
17 else:
18 break
19 addr += 1
20 return out
21
22 def getDecodeStr(str):
23 i = 0
24 out = ""
25 length = len(str)
26 while i < length:
27 out += chr(ord(str[i]) ^ 3)
28 i += 1
29 return out
30
31
32 if __name__ == '__main__':
33 try:
34 for x in XrefsTo(0x6B4C4920,flags = 0):
35 addr = getStrAddress(x.frm)
36 eStr = getEncodeStr(addr)
37 dStr = getDecodeStr(eStr)
38 set_cmt(prev_head(x.frm), dStr, 0)
39 except:
40 print("Error")

看一下添加注释后的效果:

【逆向】使用IDA Python脚本自动化解密字符串数据的更多相关文章

  1. Windows下使用VSCode搭建IDA Python脚本开发环境

    由于本人是VSCode的重度沉迷用户,需要写代码时总会想起这个软件,因此选择在VSCode中搭建IDA Python的开发环境 本文适用的环境如下: 1.操作系统 windows 2.Python3 ...

  2. Python脚本自动化破解大白鲨摄像头(Shodan)

    关于本文的技术知识点,Shodan模块的用法,传送门-->  Python中shadon模块的使用    Shodan的使用 今天我们要利用python进行自动化破解的摄像头叫大白鲨摄像头,他的 ...

  3. php外挂python脚本抓取ajax数据

    之前我写过一遍php外挂python脚本处理视频的文章.今天和大家分享下php外挂python实现输入关键字搜索的脚本 首先我们先来分析一波网站: http://www.dzdpw.com/s.php ...

  4. 使用python脚本从数据库导出数据到excel

    python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...

  5. Python脚本调用C#代码数据交互示例(hello world)

    原地址: http://www.djangochina.cn/forum.php?mod=viewthread&tid=247 随着项目的逐渐收尾, 对IronPython脚本也越来越熟悉,这 ...

  6. 【python接口自动化】- PyMySQL数据连接

    ​ 什么是 PyMySQL? ​ PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb.它是一个遵循 Python数据库APIv2.0规范, ...

  7. python脚本往redis加数据

    #-*-coding:utf-8-*-from rediscluster import StrictRedisClusterimport pymysqlimport timeimport cProfi ...

  8. 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本

    某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...

  9. 【逆向工具】IDA Python安装与使用

    1.IDA Pyhon介绍 IDA Python是IDA6.8后自带插件,可以使用Python做很多的辅助操作,非常方便的感觉. 2.IDA Python安装 从github上IDAPython项目获 ...

  10. Python脚本之——API自动化框架总结

    学完了Python脚本接口自动化之后,一直没有对该框架做总结,今天终于试着来做一份总结了. 框架结构如下图: 来说一下每个目录的作用: Configs:该目录下存放的是.conf,.ini文件格式的配 ...

随机推荐

  1. Android Studio Gradle 输出信息乱码

    Android Studio Gradle 输出信息出现乱码 如下: > Task :app:compileDebugJavaWithJavacע: ijЩ�����ļ�ʹ�û����ѹ�ʱ�� ...

  2. CamstarVP表格删除行报错

    前提:是从服务中拖出来的表格,带表达式的.但是点击删除按钮的时候,直接页面报错. 原因是:VP上面没有指定服务.

  3. go 语言操作es示例

    使用高度封装的 orm 查询 package main import ( "context" "fmt" "log" "os&qu ...

  4. npm vue-router安装报错

    因为2022年2月7日以后,vue-router的默认版本,为4版本,而且 vue-router4,只能在vue3中,只有vue-router3中,能用在vue 2中 如果把vue-router4强制 ...

  5. 抓包工具Fidder

    第一步:直接在浏览器下载 第二步:设置Fiddler打开Fiddler,     Tools-> Fiddler Options (配置完后记得要重启Fiddler)选中"Decrpt ...

  6. PCB Layout之EMMC_Flash走线总结@@@

    PCB Layout之EMMC_Flash走线总结 1,数据线DATA[0-7]走线要(基本)等长(含芯片内部线长),线要短,线间距控制3W原则,参考面要完整(参考面下面最好不要走其它高速信号线),阻 ...

  7. form 表单中input 使用disable属性

    记录一下今天踩得坑. 在使用form表单提交的时候,input用了disable属性,在查找了好久之后,找到原因,万万没想到是因为disable. 修改方法:disable改为readonly dis ...

  8. python基础 补漏

    输出 -----------定义变量类型 类型 集合 mongodb的用法和redis差不多一样的 NoSQL 数据库之一 https://www.runoob.com/python3/python- ...

  9. android studio 查看工程所有动画资源

  10. python pip的使用

    1.导出安装包 pip freeze > requirements.txt 2.安装requirements.txt文件中指定的扩展库:pip install -r requirement.tx ...