前言

一个肚脑虫(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. 002 jmeter入门级写脚本及参数化

    1.jmeter入门脚本 步骤分析:测试计划(项目名称)-线程组(业务流程)-http请求(接口名称)-察看结果树 编写脚本四要素:测试计划.至少有一个线程组.至少有一个取样器.必须要有监听器 测试计 ...

  2. python_test_5001_Moudle_pandas

    import pandas as pd import numpy as np from lib_001_decorator_log_funcname import decorator_log_func ...

  3. 【java】MVC模式和三层架构

    MVC是一种分层开发的模式 M:Model,业务模型,处理业务,存储数据,获取数据.JavaBean对象 V:  View , 视图,界面展示,展示数据.JSP或HTML C: Controller, ...

  4. MySql密码忘记怎么办?

    第一步服务 net stop mysql 第二步,执行指令 mysqld --console --skip-grant-tables --user=mysql --shared-memory 第三步, ...

  5. 官网jdk8,jdk11下载时需要登录Oracle账号的问题解决

    当到这一步骤时先勾选同意,在这个下载按钮上点鼠标右键复制链接地址 文件的下载地址 我们需要把地址做些修改.把等号前面的地址删掉,然后找到等号后面地址中的otn后面加上-pub 然后把这个地址直接复制到 ...

  6. QML调用C++程序

    QML调用C++程序 1. 添加C++,MouseMemory文件(.h,.cpp) 2. 在main.cpp文件添加, qmlRegisterType<MouseMemory>(&quo ...

  7. linux系统安装谷歌浏览器设置开机自动启动并打开指定页面

      要在Linux系统上安装Google Chrome浏览器,可以按照以下步骤: 下载Google Chrome浏览器的安装包,你可以从Google的官方网站或者第三方下载站点上获取. 解压缩安装包并 ...

  8. Vmware workstation虚拟机导入到esxi虚拟机

    VMware Workstation 与 ESXi 的主要区别 VMware Workstation是直接在windows系统下安装软件,安装后再在软件里面安装虚拟机,而ESXi相当于一个linux操 ...

  9. DevExpress各大版本支持的VS版本和支持的.net版本图

    如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题:1.要么你的Dev的版本不支持你当前的VS版本,没有很正常.2.要么你的项目的.n ...

  10. centos7 系统初始化配置

    1.设置ip地址 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens192 PROXY_METHOD="none ...