IDA创建结构体方法

article/2025/10/15 4:17:50

1. ida是最好用的逆向分析工具

2.问题

如果你在使用IDA分析时遇到大量的结构体指针偏移形式的变量,肯定想根据自己的分析重命名结构体各项。

3.定义结构体

这是需要先找到结构体初始化的地方

这里记录了每一项的偏移量,记录了结构体总大小Ox110uLL。

我们要根据这个结构体初始化函数来定义该结构体

在IDA中打开Structures,快捷键是shifr+ F9 ,然后按insert键,进行插入。

在ends 后按d键,添加相应的成员,然后选中成员名,按N进行修改,选中类型,按d 进行更改类型

00000000 DES_sturct      struc ; (sizeof=0x110, mappedto_96)
00000000 android_refbase0 DCD ?
00000004 field_4         DCB ?
00000005                 DCB ? ; undefined
00000006                 DCB ? ; undefined
00000007                 DCB ? ; undefined
00000008 item8           DCQ ?
00000010 item16          DCQ ?
00000018 item24          DCQ ?
00000020 item32          DCD ?
.......
000000E4 field_E4        DCQ ?
000000EC uuid            DCQ ?
000000F4 item244         DCQ ?
000000FC cipher          DCQ ?
00000104 nextitemofcipher DCQ ?
0000010C field_10C       DCD ?
00000110 DES_sturct      ends    

注意:

1.在定义结构体过程中要检查偏移量。比如 cipher是

*(_QWORD *)(v2 + 252) = 0LL; 

2.那么自己定义的结构体,它的位置就应该在 000000FC(16进制的252)。

定义结束后要检查总大小“ sizeof=0x110”。

4. 使自己定义的结构体和代码变量关联生效

在代码窗口找到相应的变量,右键选择Convert to struct ,然后选择刚刚你定义的结构体

此时,结构体初始化的地方显示为:

  v2 = (DES_sturct *)struct_qword_331A0;if ( !struct_qword_331A0 ){v2 = (DES_sturct *)operator new(0x110uLL);android::RefBase::RefBase((android::RefBase *)v2);v2->item48 = 1;v2->item74 = 48;v2->item214 = 2;v2->item215 = 2;v2->item16 = 0LL;v2->nextitemofcipher = 0LL; 
......v2->cipher = 0LL;                         
......android::RefBase::incStrong((android::RefBase *)v2, &struct_qword_331A0);if ( struct_qword_331A0 )android::RefBase::decStrong((android::RefBase *)struct_qword_331A0, &struct_qword_331A0);struct_qword_331A0 = (__int64)v2;}

使用结构体变量的地方显示:

    v23 = a1 + 252;

改变为

    v23 = &a1->cipher;

 我们的目的就这样达到了。


http://chatgpt.dhexx.cn/article/WFNabW3l.shtml

相关文章

手把手教你写单片机的结构体

手把手教你写单片机的结构体 摘要:听说还有好多学单片机的小伙伴不会用结构体?指针和结构体是学单片机必须要掌握的,如果你C语言掌握的不牢,单片机根本学不到精髓,只能完成一些低级的项目。看得懂结构体并且能够灵活运…

STM32基于Flash对结构体读写暨再认识结构体内存分配

目录 前言 认识结构体内存分布 模拟结构体搬运 实现FLASH的结构体读写 前言 记录本篇主要是记录我进行stm32学习中利用stm32的flash(闪存)读写结构体的总结。 认识结构体内存分布 结构体,主要要来存放我们的自定义类型的数据,结…

单片机的结构体

手把手教你写单片机的结构体 FROM8号线攻城狮 公众号 电子信息工程硕士在读,分享单片机、嵌入式linux、物联网等知识,致力于打造最硬核的嵌入式技术公众号。 半碗鸡汤,半碗杂粮。 摘要:听说还有好多学单片机的小伙伴不会用结构…

windows下mysql初始密码设置

转载自:http://blog.csdn.net/ofreelander/article/details/50802780 1.my-default.ini 改名my.ini 在解压的目录下面复制my-default.ini一份改名字为 my.ini。 2.打开 Windows 环境变量设置, 新建变量名 MYSQL_HOME , 变量值为 MySQL 安装目录路径, 在 环境变量 …

MYSQL修改初始化密码的方法

解决方法之一: “ ALTER USER rootlocalhost identified by 123456 ; ” 最近安装了mysql,在使用“ set password for rootlocalhostpassword(123456);”时会遇到 “ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that…

Centos下安装mysql查看初始密码并修改密码

题记:当我们在centos成功安装了mysql后,需要查看初始密码,大概率也需要自己修改密码。 一,查看mysql历时密码 cat var/log/mysqld.log二,进入到mysql mysql -u root -p按回车,然后再password:输入刚才所…

MySQL设置初始密码—注意版本mysql-8.0.30

MySQL设置初始密码—注意版本mysql-8.0.30 第一步:使用管理员模式下的命令行,进入mysql的所在文件下的bin目录; 第二步:输入命令mysql -u root -p; 第三步:这里第一次不用输入密码; 第四步: ALTER USER rootlocalhost…

安装mysql的初始密码在哪里

mysql初始密码是多少 介绍怎么找到mysql安装的root的初始密码 mysql初始密码是多少 介绍怎么找到mysql安装的root的初始密码 怎么给mysql设置用户名和密码 登录数据库 “命令提示字符”窗口录入, 录入cd C:\mysql\bin 并按下回车键,将目录切换为 cd C:\m…

关于MySQL初始化密码忘记的问题

本文章可以解决MySQL密码忘记的问题!!! 1、到mysql安装的bin目录下运行PowerShell 2、在命令行输入 mysql -u root -p 登录 mysql,可以随意输入一个密码,返回”ERROR 1045 (28000): Access denied for user rootlocal…

mysql安装,以及初始化密码

1.首先下载 mysql安装包, 我这里下载的mysql 5.7(免安装版) https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 然后解压到你自己的目录中,我这里为 D 盘下: 此处,下下来的压缩包里面, data 目…

mysql初始没有密码怎么设置

由于本人是win7的忠实用户,最近被win10所吸引索性换了系统,还是改不了恋旧的习惯。所以用的mysql还是5.6。进入正题 在装完mysql并且配置完环境变量之后发现密码为空 1.首先进入到你安装的目录下,这里我的是E盘 2.之后输入mysql -u root -p …

1、数据库-MySql

什么是数据库 数据库(DataBase,简称DB) 概念:长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据"仓库" 作用:保存,并能安全管理数据(如:增删改查等),减少冗余… 数据…

C++中字符串大小写字母转换

最近在学习 STL,string 也是 STL 中的一种容器,遇到一个字符串中字母大小写转换的例子,这里就顺便总结一下在C中常用的字符串大小写转换方法,有需要的可以参考。代码如下: 1、char[]类型,调用库函数 // …

大小写字母转换(java大小写字母转换)

苹果4SQQ密码大小写字母怎么转换不?苹果4SQQ密码大小写字母 每次要输密码,当时在电脑上设置的密码,可以改变大小写,但是到了手机上,我不知道怎么换大小写,那位朋友告诉下 苹果手机输入法怎么改字母的大小写 (很高兴为您解答,有帮助请给好评,谢谢! ) 大小写转换-键盘…

英文字母大小写转换

从键盘输入一个大写英文字母,将其转换味小写字母后,再显示到屏幕上(显示字符后要输出一个换行) 输入格式要求:提示信息:"Press a key and then press Enter:" 程序运行实例如下: P…

Java 字符串中的大小写字母转换

Java 实现字符串中字母大小写转换函数 实现思路:将字符串中的每个字符取出,判断该字符是不是大写字母,如果是的话则该字符32(ASCII码)并进行强制转换,转换为char,然后在通过字符串的合并操作进…

大写字母转换成小写字母

大写字母转换成小写字母 大写字母转换成小写字母1.示例:2. 解题思路3. 代码展示及分析3.1 ASCII码操作字符串转换大小写3.2 位运算 4. 运行结果 大写字母转换成小写字母 题目: 实现函数 ToLowerCase(),该函数接收一个字符串参数 str&#xf…

C++ | 大小写字母转换

1.题目描述 实现字母的大小写转换。多组输入输出。 输入描述: 多组输入&#xff0c;每一行输入大写字母。 输出描述: 针对每组输入输出对应的小写字母。 答案如下&#xff1a; #include<iostream> using namespace std;int main(){ //----------------------------…

Java-大小写字母转换

题目&#xff1a;输入一段字符&#xff0c;包含大写字母或者小写字母&#xff0c;输出对应的大写或者小写转换&#xff0c;数字不管 代码实现&#xff1a; import java.util.Scanner;public class ZimuChange {public static void main(String[] args) {System.out.println(&qu…

线程中CreateEvent、SetEvent、WaitForSingleObject的用法

原文地址&#xff1a;https://www.cnblogs.com/MrYuan/p/5238749.html 首先介绍CreateEvent是创建windows事件的意思&#xff0c;作用主要用在判断线程退出&#xff0c;线程锁定方面. CreateEvent 函功能描述&#xff1a;创建或打开一个命名的或无名的事件对象. EVENT有两种…