- 博客(36)
- 收藏
- 关注
原创 首届钓鱼城杯逆向题REG题解
首届钓鱼城杯逆向题REG题解首先下载程序,观察, 通过这个图标可以看出,感觉这个程序并不是普通的C/C++写的EXE程序,而是其他语言打包的用IDA打开程序,果然,毫无头绪用010editor打开程序,发现里面找到了关键字符串,然后居然是在资源段用ResourceHacker打开reg.exe发现,关键数据是在PRELOAD.MAIN里面,并且可以发现这个程序是用aardio写的,本来想反编译PRELOAD.MAIN来还原源代码来着,结果并没有找到相关aardio反编译的资料 (如果大佬知道
2020-08-28 16:06:50
872
原创 2020强网杯部分题WP
侧防IDA打开程序写脚本逆向即可str_enc = "Lx|dTUwe\IvNhCBOLqDNfW}ImFZCtiyxO\PW^ebD"str_ = []for i in range(0,len(str_enc ), 4): str_ .append(str_enc [i+1]) str_ .append(str_enc [i+2]) str_ .append(str_enc [i+3]) str_ .append(str_enc [i])print
2020-08-25 10:33:21
1420
3
原创 网鼎杯朱雀组逆向 tree
找到main函数进入到chkflag函数,发现其是将输入的flag中的xxx每一个x都换成2进制的形式,每一个4位,然后存在glockflag中parse函数是将glockflag中的二进制拿出来,0代表左,1代表右,开始遍历叶子节点,如果找到的叶子节点是zvzjyvosgnzkbjjjypjbjdvmsjjyvsjx,就正确我们先将 每个节点及其路径打印出来def traverse_leaf(pnode): if pnode != 0: if Dword(pnode
2020-05-19 09:34:18
786
原创 对CS1.6游戏的分析及心得
前言前段时间分析了一下CS1.6游戏,一直没有时间整理思路写帖子,最近,由于疫情关系,忽然想起了这件事,又重新回顾了一下,写下这篇文章与网友们互相交流学习。本文主要是讲一下指针扫描器和Ultimap的具体使用以及它的强大之处,然后讲一下自己分析游戏数据的一些心得,最后再用一个准星吸人的例子讲一下HOOK的心得使用指针扫描器快速寻找基址使用CE寻找基址,一般的思路就是查找游戏数据,找到数...
2020-03-17 17:26:16
3538
2
原创 第8届山东省大学生网络安全竞赛 逆向 WP
RE1 题目给出了一个flag.pyc文件和out.txt文件, 一看就是反编译pyc文件,于是开始用uncompyle6开始反编译,发现提示是模数错误于是打开文件发现模数是20 19,然后自己python2编译了对应的pyc文件,发现模数是03 F3于是将模数修改,然后利用uncompyle6反编译出原py文件import mathflag = 'flag{************...
2019-11-08 23:26:20
974
原创 测试DLL劫持
我们的思路是写1个exe,2个dll分别是 testDLL劫持.exe a.dll hijack.dlltestDll劫持.exe 动态加载 a.dll,然后调用里面的Add()函数,我们将 a.dll 改名为b.dll 然后将 hijack.dll...
2019-10-18 18:30:52
961
1
原创 TLS 线程局部存储
在学习逆向的过程中,大家可能了解到利用TLS,可以实现反调试,因为TLS回调函数会在入口函数之前执行,但是可能不知道具体的原理,以及TLS是个什么东西,通过下面的介绍,你将会了解TLS的原理以及用法。什么是线程局部存储? 线程局部存储(Thread Local Storage),又简称T...
2019-10-14 18:01:34
863
原创 游戏保护_CRC32检测
CRC算法简介“CRC” 的全称是 “Cyclic Redundancy Checksum” 或者 "Cyclic Redundancy Check",是对数据的校验值,中文名是“循环冗余校验码”,常用于校验数据的完整性。最常用的CRC 算法是 CRC32(即数据校验值为32位)CRC算法代码量小,容易理解,目前应用十分广泛。CRC算法也广泛应用在游戏安全领域,用于对游戏代码的校...
2019-10-07 16:18:50
2070
原创 2. PE文件的两种状态
PE文件有两种状态,一种是在硬盘中的状态,一种是在内存中的状态在内存中的状态 其实 就是对在硬盘状态的拉伸这里可以看到,DOS头,PE文件头,块表是不变的剩余的段 是按照 内存对齐 和 文件对齐 来进行拉伸的文件对齐的目的是 执行速度会快...
2019-06-23 23:21:10
359
原创 1、PE文件
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE,DLL,OCX,SYS,COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)PE文件由操作系统进行加载非可执行文件不是由操作系统进行加载的.exe .dll .sys不要根据后缀名来判断是否是exe文件...
2019-06-10 11:02:08
318
原创 7、经典变长指令_SIB
有没有SIB,是由ModR/M来确定的,DIsplacement和Immediate也是由ModR/M确定的当查表的时候,如果遇到下面这种情况则说明,仅仅通过ModR/M是确定不了指令格式的,还得通过SIB当R/M是100的时候,一定有SIBSIB的格式SIB查Table 2-3 (此表在511页)举个例子:88 84 48...
2019-06-09 11:11:20
605
原创 6、经典变长指令之_ModRM
ModR/M只有一个字节经典变长指令 _ModR/M0X88 MOV Eb, Gb G:通用寄存器0X89 MOV Ev, Gv E: 寄存器/内存0X8A MOV Gb, Eb b: 字节0X8B MOV Gv, Ev v: Word, doubleword, quadword举个例子:88 0188查主表就是 MOV Eb, Gb (主表在254...
2019-06-09 11:07:14
566
原创 5、经典定长指令_修改EIP
1、0X70---0X7F跳转范围:-0X80----------0X7FOpcode是1个字节,指令长度是2个字节2、0X0F 0X80 --------0X0F 0X8F跳转范围:-0x80000000-----------0X7FFFFFFFOpcode是2个字节,指令长度是5个字节3、其他指令4、其他指令高2位即高地址的2位...
2019-06-09 11:02:33
276
原创 4、经典定长指令_修改ERX
定长指的是:只要Opcode确定,这条指令的长度就确定了,这就是定长而不是 Opcode 的长度就是指令的长度要记住通用寄存器的顺序,有利于理解硬编码0 EAX1 ECX2 EDX3 EBX4 ESP5 EBP6 ESI7 EDI1、PUSH/POP50 PUSH EAX51 PUSH ECX52 PUSH EDX5...
2019-06-09 11:00:33
295
原创 3、定长指令与变长指令
1、指令编码(硬编码)的结构除了Opcode之外,其他的都是可选的,所以Opcode是一个硬编码的灵魂Opcode ModR/M SIB这3个决定了整个指令的长度Displacement Immediate的长度由前3个(Opcode ModR/M SIB)决定Opcode决定 ModR/M 的有无ModR/M决定 SIB 的有无2、什么是定长指令?什么是变...
2019-06-09 10:59:21
8847
原创 2、指令前缀
1、指令编码(硬编码)的结构怎么判断是不是前缀指令呢? 前缀指令就几个,很好确定,根据指令的内容来确定2、前缀指令是分组的:前缀指令最多是4个,每组一个<1>LOCK 和REPEAT前缀指令:LOCK F0 //锁地址总线的 在同一时刻只能有一个核的CPU来读取那条指令,这个指令在多核下才有意义REPNE/REPNZ F2 //重复执行 当...
2019-06-09 10:54:37
1237
原创 1、硬编码
1、什么是硬编码?就是机器码,就是指令,他本身有自己的格式比如这种指令,就是硬编码X86下指令长度最短是1个 最长15个硬编码的结构:2、哪些人需要学习硬编码?<1>病毒与反病毒I<2>加密与破解<3>外挂与反外挂所有与计算机底层相关的行业都需要深入学习、了解硬编码。3、学习硬编码需要参考的书籍在...
2019-06-09 10:50:56
956
原创 第一个Windows程序
int WINAPI WinMain( HINSTANCE hInstance, //当前模块的地址 HINSTANCE hPrevInstance, //永远为NULL,不用管它 LPSTR lpCmdLine, /...
2019-06-04 16:15:15
229
原创 消息队列
1、什么是消息?当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统都要把这些动作记录下来,存储到一个结构体中,这个结构体就是消息。2、消息队列:每个线程只有一个消息队列当我们用鼠标点击某个窗口右上角的X号的时候,具体的步骤如下1、发送一个消息,将消息放入到系统消息队列里面2、系统根据这个消息找到对应的窗口对象 (怎么找的,见下面问题1)3、根据窗口对象里面...
2019-06-04 16:12:30
179
原创 窗口的本质-----------画出来的
1. 窗口的本质kernel32.dlluser32.dll ------------------------>GUI编程gdi32.dll里面是接口------------>GDI编程针对窗口的句柄表(HWND)是全局的2. GDI 图形设备接口 (Graphics Device Interface)<1>设备对象(HWND) 画在哪...
2019-06-04 16:08:52
167
原创 事件
1. 事件创建事件函数CreateEventHANDLE WINAPI CreateEvent( __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,//SD __in BOOL bManualReset, //是否手动重新设置标志位,如果为TRUE,即用来互斥,如果为FALSE,即用来通知 __in BOO...
2019-06-04 16:04:33
132
原创 互斥体
互斥体与线程锁的区别1. 线程锁只能用于单个进程间的线程控制2. 互斥体可以设定等待超时,但线程锁不能3. 线程意外终结时,Mutex可以避免无限等待------------互斥锁的abandon问题4. Mutex效率没有线程锁高多次释放互斥对象的问题在调用了WaitForSingleObject函数来获得了互斥内核对象的所有权之后,在本线程当中,若再次调用Wait...
2019-05-24 17:25:53
190
原创 临界区
1、线程安全问题每个线程都有自己的栈,而局部变量是存储在栈中的,这就意味着每个线程都有一份自己的“局部变量”,如果线程仅仅使用"局部变量"那么就不存在线程安全问题。那如果多个线程共用一个全局变量呢?比如看如下代码:·运行结果:2、临界区实现之线程锁运行结果:临界区的代码在同一时刻是只允许一个线程执行的,这样的话就不会出现问题了这样的话就不会...
2019-05-24 17:15:51
278
原创 创建线程需注意的一个问题
代码:就是在线程ThreadProc11中用到了线程ThreadProc这个线程的局部变量,所以这个局部变量的存活时间必须得比ThreadProc11这个线程存活时间长才可以,显然上面代码并没有做到这一点,,,,,因为线程ThreadProc比ThreadProc11结束的早,所以出现非法内存访问另外列举一些控制线程的API暂停线程恢复线程SuspendThread()...
2019-05-24 17:10:37
211
原创 工作路径与模块路径的区别
在Win32API中工作路径是用GetCurrentDirectory()获得;而模块路径是由GetModuleFileName()获得下面通过一段简单的代码来解释一下工作路径与模块路径的区别运行结果:当前模块路径是不变的,文件放在哪,他就是啥但是工作路径的话就不同了,工作路径是父进程通过CreateProcess这个API传给他的,通过参数 __in_opt LPCT...
2019-05-19 22:59:09
1180
2
原创 PID与进程句柄的关系
在操作系统内核区维护着一张全局句柄表,全局句柄表里面存放着所有进程内核对象,而全局句柄表的索引就是PID当前进程的 进程句柄 是当前进程句柄表的索引,它只在本进程有效但是PID是全局句柄表的索引,所以它对所有的进程都有效...
2019-05-19 22:50:04
2575
原创 句柄表
1. 什么是内核对象?像进程,线程,文件,互斥体,事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。2. 如何管理内核对象?通过一个叫 "句柄" 的东西3. 每个进程都有一个句柄表不是每个内核对象都有句柄表,只有进程内核对象才有句柄表,即句柄表是进程内核对象中的一个成员4. 多进程共享一个内核对象句柄表是一个私有的值,句柄...
2019-05-18 17:58:49
148
原创 进程的创建过程
所有的进程都是由别的进程创建出来的,用鼠标双击运行一个程序的时候,实际上是由explorer.exe这个进程创建出来的那么这个时候有人可能会问,所有的进程都是由其他进程创建出来的,那么第一个进程呢?第一个进程其实是由操作系统内核进行创建的进程的创建过程:映射EXE文件创建内核对象EPROCESS(一个进程对应一个EPROCESS)映射系统DLL(ntdll.dll)创建线程内核对象ET...
2019-05-18 17:47:47
4029
原创 字符编码问题
1、ASCII编码0 - 7F,0000 0000-----0111 1111标准ASCII码80 - FF 1000 0000 -------1111 1111扩展ASCII码2、GB2312或GB2312-80(针对自己国家)基于扩展ASCII码单独看每一个字节,都是扩展ASCII码表中的数据,2个表示一个汉字,这就是GB2312编码,但是GB2312存在很大的弊端,例...
2019-05-17 22:37:47
153
原创 APC机制两个问题
一、特定情况下WaitForSingleObjectEx返回值的问题等待内核对象处于激活状态 (下面是hEvent)线程处于警觉状态,且APC队列中有函数(APCProc)两个条件同时满足的时候,WaitForSingleObjectEx这个函数的返回值是什么?代码:#include <stdio.h>#include <windows.h>VOID ...
2019-04-01 20:05:23
424
原创 WP-南邮CTF逆向第六题 WxyVM2
WP-南邮CTF逆向第六题 WxyVM2用记事本打开WxyVM2,发现是elf文件用ida pro载入这个文件,找到main函数这个地方有个红色的部分 ,意思是块内容太大,无法显示, 这里我们先不用管,过会查看伪代码之后就知道什么意思了,,,按下F5查看伪代码,这个地方由于代码过于庞大,耐心等待了一会,终于显示出来了,对了,这个地方有的朋友可能由于代码段过大而没有办法查看伪代码,这个时...
2018-11-08 16:47:34
585
原创 WP-南邮CTF逆向第五题 maze
WP-南邮CTF逆向第五题 maze用记事本打开maze,发现是elf文件将maze载入idaPro,找到main函数,按下F5查看其伪代码。分析伪代码根据分析,可知0X601060处是一个迷宫(maze),我们对sub_400690这个函数进行分析然后观察0X601060处的数据,是保存了64个数据,再根据sub_400690这个函数中的可以判断出,这是一个8 * 8的迷...
2018-11-08 16:21:12
1511
原创 WP-南邮CTF逆向第四题 WxyVM1
WP-南邮CTF逆向第四题 WxyVM用记事本打开后发现前面有elf,所以确认这个是一个elf文件.打开IDA,载入WxyVM1,找到main函数,按F5,得到伪代码,并对伪代码进行分析对sub_400586这个函数进行分析观察这个函数,发现里面只有6010C0这个地址和604B80这个地址,并没有601060这个地址,说明这个函数是根据6010C0处的数据对用户输入的字符串进行重写...
2018-11-08 16:01:51
633
原创 WP-南邮CTF逆向第三题 Py交易
WP-南邮CTF逆向第三题 Py交易1.由于ida只能查看可执行文件的汇编代码,而本题素材Py.pyc是不能载入ida的。2.所以打开百度搜索Python反编译器,将Py.pyc导入,这样我们就可以看到python源码了—虽然此题是python,但是只要你懂一点C语言,这段代码是完全可以看懂的3.对代码进行分析,发现程序是将用户输入的flag的每一个字符与32进行按位异或,然后+16,最后...
2018-11-08 15:46:34
779
原创 WP-南邮CTF逆向第二题 ReadAsm2
WP-南邮CTF逆向第二题 ReadAsm2这道题是考察读汇编能力先打开2.asm对汇编语言从上往下一条一条的进行分析,注释部分即分析的情况,分析如下图3.然后我们分析完这段汇编之后,用C语言的形式将它表示出来我们得到真正的flag为:flag{read_asm_is_the_basic}...
2018-11-08 15:34:08
681
原创 WP-南邮CTF逆向第一题 Hello RE
WP-南邮CTF逆向第一题 Hello RE首先打开ida载入1.exe文件找到main函数,进行观察发现解题的关键有可能就是这个strcmp函数4. 用ida调试到strcmp这个位置5. 观察两个参数,一个是用户自己输入的flag,而另一个参数就有可能是真正的flag至此,我们找到真正的flag为 flag{Welcome_To_RE_World!}6. 再次...
2018-11-08 15:21:10
986
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人