自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (3)
  • 收藏
  • 关注

原创 如何将汇编语言逆向成为C语言

一、应用场景 逆向过程中往往需要将汇编语言逆向成为C语言,IDA是一个很好的工具,给我们逆向工作带来了很大的便利,但是,如果IDA没有识别出来代码呢,jumpOUT,我们需要掌握将汇编语言直接转成C。二、反汇编技巧(摘取自 天书夜读) 2.1 首先,将流程代码与数据计算的代码分开,我们使用 F: 用于标识 调用函数或者作为函数被调用,出栈、入栈...

2019-05-12 17:18:00 28182

原创 逆向反汇编--- 虚函数特征识别与虚表的建立

一、虚函数重要性虚函数是面向对象的重要组成部分,是多态的基础,如果定义了虚函数但是没有定义构造函数,编译器必须提供默认的构造函数(因为必须要初始化虚表指针);二、虚函数特性与识别虚表指针一定是在对象的首地址的前4个字节(固定的,且4字节,这一点很重要),虚表指针指向的虚函数表的首地址,虚函数作为成员函数使用; 对于开发者来说,虚表和虚表指针都是隐藏的;如果类没有虚函数,构造的时候不...

2019-03-08 23:14:32 946

原创 OD使用技巧 (持续更新中)

常见问题,从易到难,如果错误,请指正,谢谢。OD 做逆向分析的关键:函数调用参数及返回值的变化、内存数据变化;3.1 如何将在一个OD中下的断点,在另外一个OD重中使用?方法:将当前库的UDD文件拷贝到新的OD的UDD文件夹下即可;3.2 如何下条件断点?当某处多次被跑到,需要在特定的情况下停下,使用条件断点;快键: Shift + F12例如:如果想到值为A的时候断...

2018-09-09 11:38:22 3204

原创 IDA逆向技巧(持续更新)

读者如果发现错误,请指正。IDA的逆向分析水平就是一个逆向工程师的水平;7.1 IDA与OD的联合使用一般使用OD下断点,找到关键代码位置,然后使用IDA静态看流程。需要注意的是IDA需要与OD基地址对齐,这样才方便在IDA中查找代码位置,具体方式如下:Edit ---> Segment ----- Rebase Program : 设置基地址;在WINdbg中基地址...

2018-09-02 17:48:53 24558 9

原创 IDA 逆向代码 --- _stack_chk_guard变量 之后的局部 怎么处理

场景:IDA逆向代码的时候,看到反编译出来的有边界检测,一般使用最后一个四字节局部变量A做边界检测,但B也有些情况下,这个边界后面还会定义一个局部变量B,根据反编译出来的代码,可以看出这个 B 没有什么实际的意义,代码使用它的地址来进行偏移访问前面的局部变量。 char s_reqcomand[100]; // [sp+14h] [bp-ECh]@1 unsigned __int8 v...

2020-03-25 18:48:46 2118

原创 IDA 逆向代码 --- LOBYTE、HIBYTE、BYTE0~BYTE3 的使用

场景:IDA 反编译的代码,对于取当前数的某位时,使用的是LOBYTE、HIBYTE、BYTE1~BYTE8,但是实际上,IDA反汇编的代码里面 BYTE8从来没有用过,会使得逆向工程师产生疑惑。需要知道其具体的意义.分析,这些类型数据都存储在defs.h 中,我们逆向代码的时候可以直接将此文件加到工程中,直接创建一个win32工程,贴下列代码://测试 LOBYTE、HIBYTE ...

2020-03-25 18:10:30 7176 1

原创 C/C++开发:一维二维数组的创建与释放

一般情况,参考设备使用查找的时候,数据量太小,都不会去管内存分配是否成功,因为分配的内存太小。但是我们逆向的时候,却要将全部的信息都要输出,就不能和参考设备一样的处理;我门要仔细的使用malloc 和free,否者很容易出现内存访问错误;1、一维数据的创建与释放创建:v9_ptr_dtcCodesoffsets = (int *)malloc(4 * v26_dtc_Numbe...

2020-01-07 11:10:19 389

原创 adb pull 失败,提示“/system/bin/sh: adb: not found”

常识:最后是一个美元符号$,则表示不是以root身份运行;最后是一个井号#,则表示是以root身份运行。如果没有root,要使用root权限,则需要执行su命令,但执行后出现提示:/system/bin/sh: su: not found解决:需要在PC端使用adb pull,而不是在adb shell中使用;如果是没有权限:下载一个一键root来生成root用户;下了个...

2019-12-18 11:05:15 27423 2

原创 IDA 逆向代码 --- 反编译失败 Decomplication failure

场景:IDA经常会解析错误,Decomplication failure,我们要学会如何处理这些错误,才能得到伪代码。可能原因1:函数约定的错误;可能原因2:函数参数识别错误;解决方法:分析函数的参数个数和调用约定,Y重新定义函数;例如:上面有提示出错的地址 ,G过去看 是在调用函数,看看他是调用什么函数,函数有啥问题。可能原因3:函数体内字节码未识别;解决...

2019-11-29 11:14:17 2116

原创 IDA 逆向代码 --- 双精度浮点型jumpout

场景:IDA识别出一个函数为:int __fastcall _floatsidf(int result){ if ( result ) JUMPOUT(&loc_DD7F4AA4); return result;}分析:调试一下,通过输入和输出发现:函数floatsidf 实际上就是将int 转换成为 double型;浮点数,注意R0 和R1,是使用...

2019-11-11 16:23:00 4627

原创 IDA 逆向代码 --- 可变参识别错误解决

一、背景:碰到一个IDA识别可变参函数调用的时候,识别错tt_uart_send_head_80499B6(2, 0x19);//函数调用的地方unsigned int tt_uart_send_head_80499B6(int a1, ...)// 函数定义明显这里有错误,因为我们知道可变参列表的前面一定有一个参数表示可变参的个数;二、分析: 2.1 可变参的基础C 库宏 - v...

2019-11-11 15:49:04 1850

原创 C/C++ 开发:全局变量在多文件中的使用 ---一个链接问题的解决

背景:碰到一个链接问题:ID_decode.obj : error LNK2005: "char * ReadPath" (?ReadPath@@3PADA) 已经在 Head_decode.obj 中定义原因:char* HeadPatch 这个全局变量在.h 中赋值,然后此.h 又被ID_decode.cpp 和Head-decode.cpp 包含,重复定义;尝试:使用条件编译和#progma...

2019-11-01 14:29:44 810 1

原创 C 单片机开发 栈溢出问题

问题描述:代码运行出错,与预期不符,在一个常被调用的函数(当前为messagebox)中使用时出错。跟踪分析:发现原来是一个全局变量在运行过程中被修改了,仔细排找到了查修改的函数。发现是 局部变量空间 与 全局变量的空间进行重叠,导致栈溢出。(这种现象真的很少见)解决方法:将栈空间调大一倍。运行结果:...

2019-10-15 10:45:36 1303

原创 C语言读文件问题: fread读取文件返回的长度比实际读取的要少很多

问题:fread读取文件返回的长度比实际读取的要少很多,文件大小5M,以“r”模式fopen,读取10000个字节,返回长度0x301(769),实际读取了2400(0x960)个字节;如下图:解决方法:将fopen的模式改为 FILE* pFileRead = fopen(filename, "rb+");//二进制读取,如果只是r ,读取出来的数据会错误,20191014.就能...

2019-10-14 10:51:06 4583

原创 IDA逆向代码 --- 结构体分析与建立

结构体的创建首先要确定结构体的大小,主要是通过数据的使用来确定结构体的大小; IDA中结构体成员一般出现在:类初始化的地方(XX.dll);根据成员的多少,我们创建结构体的大小,注意虚表vt占4个字节;一般有三个地方有助于我们创建结构体:初始化函数成员列表、memcpy函数的使用、memset函数的使用、数据库字段;在memcpy的参数中的size,结构体大小起码为size;在...

2019-10-11 17:35:51 1745

原创 VS2015 安装VA番茄插件

具体方法:1、百度搜索:“va_x2074”在欧普中下载工具: Visual Assist X。解压后实际是 VA_X_Setup2048.exe2、点击安装“VA_X_Setup2048.exe”,直接安装即可。 3、将解压后的 VA_X.dll复制到C:\Users\Think\AppData\Local\Microsoft\VisualStudio\14.0\Ext...

2019-09-16 11:48:18 6843

原创 IDA 逆向代码---小技巧

1、识别局部变量。 反汇编出来的伪代码中,后面又注释的 rX@X的就是局部变量; int v7_stepID; // r0@1 int v8_ret; // r4@1 局部变量可以直接使用,IDA一般不会识别错误; 2、越界判断代码,逆向时不用管。 unsigned __int8 v13_recbuf[1024]; // [sp...

2019-09-07 16:41:00 2105

原创 IDA andriod程序分析小技巧

1、andriod elf文件识别: 实际上.so 文件就是 elf 文件格式; IDA识别显示:“ELF for ARM (Shared object)[elf.ldw]”2、函数调用时,前四个参数放在IDA的r0\r1\r2\r3,其余参数的放在stack区 中; 例如:sprintf(dest_describe_value, "%03d %02X %c%c%c ", ...

2019-09-07 16:36:42 298

原创 IDA逆向代码 --- F5 反汇编识别错误的情况

场景:F5 之后的伪代码,变量直接被使用,没有被赋值,但是根据上下文,一定具有含义;例如:v3 = &v104 + 0x14 * (signed __int16)v29 - 0x442;// 这里的104 是什么??前面只有定义,没有被赋值,而且不属于数组中的一部分查看对应Arm指令:.text:9FAADCD8 MOVS R6, #0...

2019-09-07 16:28:09 3305

原创 IDA 逆向代码--- 指针类型的使用

场景:指针、地址、数组访问、一维二维数组转换在IDA F5 之后的伪代码里面时常被用到;理解:指针指向的是地址,指针表示的是 从某个地址开始 按照 指定数据类型 读取数据;如下函数定义: int v12; // r3@32 unsigned int v39[96]= { //int v39; // [sp+94h] [bp-1074h]@1 ...

2019-09-07 16:15:15 1618

原创 VC常见链接错误

1、 LNK2019 无法解析的外部符号 "void __cdecl tt_Audi_SearchCommand(int,unsigned char *)" (?tt_Audi_SearchCommand@@YAXHPAE@Z),该符号在函数 "unsigned int __cdecl tt_CANBUSMileageServiceReset(int,unsigned char *,in...

2019-08-05 17:07:49 533

原创 IDA sig文件的生成与使用

问题引入:Sig文件能使得IDA识别更多的符号,便于分析;前面在《IDA 逆向技巧》中有提到sig文件的制作,自己写一个demo编译成为lib,再生成sig文件,具体步骤如下;1、使用IDA打开lib,可以看出lib里面有多少个obj文件;2、使用link.exe 将lib中的obj文件导出来(这个link.exe 来自于哪里?)命令:link -lib /extract:test...

2019-08-05 11:02:22 2408

转载 产业互联网时代的到来(内容摘自看雪论坛)

产业互联网日益成为众多行业实现转型,获得发展新动能的趋势性选择,政务、金融、医疗、出行、教育、零售、工业等垂直领域,正在全面拥抱产业互联网。网络安全 作为互联网的基础保障,在产业互联网发展和企业数字化升级的过程中将展现哪些新特性?产业互联网各个链条的参与者该如何 应对?这里我们主要关注产业互联网;相比消费互联网,产业互联网时代的安全呈现出了新的特性。第一个,...

2019-08-03 17:40:40 217

原创 IDA 逆向代码 --- 数组分析与建立

需要逆向的代码:(IDA 拷贝出来的) int v54; // [sp+F4h] [bp-1124h]@1 int v55; // [sp+104h] [bp-1114h]@1 int v56; // [sp+108h] [bp-1110h]@1 int v57; // [sp+10Ch] [bp-110Ch]@1 int v58; // [sp+110h] [bp-1108h...

2019-08-02 20:03:50 2396

转载 IDA+ADB调试so文件(USB连接手机方式)

一、把手机通过usb接口连上pc1.一定要在开发人员选项中打开USB调试2.确定手机已经root3.usb接口连上pc二、把IDA目录dbgsrv文件夹下的android_server文件传到手机以IDA路径D:\IDA_Pro为例1.打开CMD进入D:\IDA_Pro\dbgsrvd:cd D:\IDA_Pro\dbgsrv2.检查ADB是否已经正确安装adb3....

2019-07-30 19:29:11 1436

转载 Unicode字符集和多字节字符集关系(转)

 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。多字节字符集:  在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7bits来表示一个 字符,总共表示128个字符,其中包括了 英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8bits表示一个...

2019-07-26 17:21:24 358

原创 char* 转换成为CString 字符编码发生变化,导致乱码

问题:MFC工具将CString保存文件的时候,出现乱码,但是使用VC文本可视化工具,又是正常显示的;原因:Char* 转换成为 CString的过程中,编码格式发生改变;多字节转换成为unicode编码,数据发生变化;VC 可是化工具实际上使用的是DOS格式,所以CString 和 Char* 都是相同的中文显示(0D 0A);选取一段数据,进行前后的对比decryptStr=...

2019-07-26 11:32:56 1828

转载 Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家分享。先总结一下网上找到的三种转换的方法:方法一:使用函数setlocale    setlocale(LC_ALL,"chs");    需要包含头文件#include<loc...

2019-07-25 12:06:15 1808

转载 Android IDA So的动态调试(转载)

问题:1.动态调试的作用以及与我们常说的脱壳区别之处?2.IDA的下断点调试的原理?3.有无反调试的步骤区别?以及原理?4.反调试与反附加的区别?5.IDA动态调试so时有哪三个层次?以及如何下断点?注意:so的动态调试与脱壳在步骤上有很多的相似之处,关于脱壳在后面会详细介绍加壳以及脱壳的发展历程。解答:第一个问题:动态调试的作用以及与我们常说的脱壳区别之处?曰...

2019-07-24 20:07:24 286

原创 IDA + ADB 调试andriod 设备环境搭建

一、工具1.1ADB 工具包1.adb1.0.321.2 吾爱破解:IDA6.91.3 目标andriod 设备1.4 USB线一条二、搭建环境 IDA调试andriod设备条件: andriod设备先运行起来 android_server, 然后 PC 端 forword对应的端口,才能链接;2.1将adb中的android_server 传到目标设备中;2.2...

2019-07-22 19:58:53 1347

转载 IDA动态调试---设置内存断点(半转载)

前言在IDA中单步,找到一段数据后,想看看数据是如何被使用的。对数据下内存访问断点。然后F9让cm跑起来,当内存访问断点命中后,停下来单步数据处理的逻辑,这样操作性强。实验实验环境IDA7.0 + win10x64*在代码区,g到找到的数据块地址。*在数据块首地址按下F2,设置断点。*因为这个断点所在位置不是代码块,IDA会弹出设置对话框。可以在里面填数据块长度。...

2019-07-22 19:32:47 7981 1

原创 new delete 的本质

C++里面new用来分配内存,delete用来释放内存,它们与C中的malloc和free有什么联系呢? int* pi = (int*)malloc(sizeof(int) * 1);//分配四字节 free(pi); //malloc->_nh_malloc_dbg->_heap_alloc_dbg->_heap_alloc_base->HeapAlloc...

2019-05-26 10:03:49 304

原创 继承与模板的区别

体会:继承是数据的复制、模版是代码的复制。模板函数在编译完成之后,会生成对应参数数类型的函数;继承是对虚表、数据的复制,其中也涉及到使用虚函数继承产生多态时,虚表函数的替换;template<class T>void Sort(T arr, int nLength){ int i; int k; for (i = 0;i < nLength - 1;i++...

2019-05-25 08:44:14 1916

原创 一般加密系统都不会加密自身的文件类型

一个破解小思路:加密软件一般不会 对自己使用的文件进行加密,所以被加密的文件后缀改为加密软件中的文件后缀,就不会被加密了。

2019-05-12 16:54:58 372

原创 OD 与X32 的条件记录断点的使用和对比

一、应用场景 我们在逆向分析的过程中,往往碰到一些需要打印内存数据的情况,特别是分析对象将数据写在代码里面的时候,少量有规律的数据可以通过条件记录断点来进行打印。二、OD的条件记录断点 下断点后,右键选择条件断点,弹出条件记录的设置框框,相关选项如下: 条件:为空就行了 说明:不用填 表达式记录描述:dwo...

2019-05-11 21:51:03 1628

原创 Convert.ToDecial() 精度缺失

一次dnspy调试的时候,一个float的值表示位 2.09702E+9(实际是2097024256.0),显示在界面上是2097024000.通过查看内存值,发现原来是ToDecimal 导致了精度缺失.float value1 = 2097024253.0f;decimal value2 = Convert.ToDecimal(value1);结果:20970...

2019-05-08 23:59:00 754

原创 C/C++: 移位指令操作归类

1、算术移位指令 指令格式:SAL / SAR Reg / Mem, CL / Imm 左移低位补0,右移高位补最高位2、逻辑移位指令 指令格式:SHL / SHR Reg / Mem, CL / Imm 左移低位补0,右移高位补03、循环移位指令 指令格式:ROL r / m, i8 ROR r / m, CL Rotate Left4、带进...

2019-05-03 23:38:41 1067

原创 C/C++: C宏、头文件、内存分配、文件读写相关函数

#define 1、只作字符序列的替换工作,不作任何语法的检查2、如果宏定义不当,错误要到预处理之后的编译阶段才能发现# define MAX(A,B) ((A) > (B)?(A):(B))注意:1、宏名标识符与左圆括号之间不允许有空白符,应紧接在一起.2、宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换.3、为了避免出错,宏定义中给形参加上括号.4、末尾不需要分...

2019-05-03 23:16:56 360

原创 X86 逆向反汇编: 指针

注意点:1、带*类型的变量宽度永远是4字节、无论类型是什么,无论有几个*.2、带*类型的变量,++ 或者 -- 新增(减少)的数量是去掉一个*后变量的宽度3、带*类型的变量可以加、减一个整数,但不能乘或者除.4、带*类型变量与其他整数相加或者相减时:带*类型变量 + N = 带*类型变量 + N*(去掉一个*后类型的宽度) char* a; short* b; int* c;...

2019-05-03 11:27:39 650

转载 详解反调试技术(转)

反调试技术,恶意代码用它识别是否被调试,或者让调试器失效。恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间。为了阻止调试器的分析,当恶意代码意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。这里介绍当前常用的几种反调试技术,同时也会介绍一些逃避反...

2019-05-02 14:50:42 2890

Android学习教程资料

包含完整的android开发资料,AndroidNDK开发、Java虚拟机工作原理、.docandroid深度学习课件.pptx

2018-11-04

代码混淆技术

代码混淆技术总结,一般的混淆技术,方法,及解决方法。

2018-11-04

反调试技术

反调试技术总结 ,常用的反调试手段,检测方法: 探测Windows调试器、手动检测数据结构、系统痕迹检测...

2018-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除