
ctf
文章平均质量分 60
I Am Rex
24届毕业生,it工程师
展开
-
如何Reverces(干扰分析技术及破解技术)
常见的干扰逆向分析的技术有花指令,反调试,加壳,控制流混淆,双进程保护,虚拟机保护等技术,下面会简单介绍这几种技术并介绍破解的基本思路。10.3.1花指令花指令是代码保护中的一种比较简单的技巧。其原理在原始的代码中插入一段无用的或者能够干扰反汇编引擎的代码,这段代码本省没有任何功能性作用,只是一种扰乱代码分析的手段。1.基本思路花指令主要是影响静态分析,在IDA中表现为一些指令无法识别,导致某些函数未能识别,从而无法对这些函数进行反汇编。在IDA中手动将花指令patch成nop空指令,可以去除花指令原创 2022-01-12 09:02:34 · 490 阅读 · 0 评论 -
angr的学习与记录(二:寄存器、栈和内存设置)
03_angr_symbolic_registers输入值在寄存器设置int __cdecl main(int argc, const char **argv, const char **envp){ int v3; // ebx int v4; // eax int v5; // edx int v6; // ST1C_4 int v7; // ST14_4 unsigned int v9; // [esp+8h] [ebp-10h] int v10; // [esp+C原创 2021-09-22 11:04:25 · 532 阅读 · 0 评论 -
angr的学习与记录(一:输入find地址、avoid地址和不确定查找)
angr是干嘛的总结来说,angr用于逆向工程中进行二进制分析的一个python框架具体介绍见其github主页angr符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。 – 摘自维基百科我的理解就是一个可以自己寻路的爆破工具然后说一下学习:原创 2021-09-12 19:41:22 · 1040 阅读 · 0 评论 -
新手如何Reverces(3自动化逆向篇)
自动化逆向在前面的介绍中,大多数逆向都是通过手工逐步进行分析,但是出于效率的考虑,我们更希望使用脚本来对一些重复的工作进行自动化处理。在逆向工程领域,有较多使用python开发的工具,这些工具大多数支持分析人员编写相应的脚本来完成一些自动化的处理工作。这里介绍几个常用的工具目录自动化逆向1.IDAPython1.IDAPython通过IDAPython插件,分析人员能够以Python脚本的形式访问IDC脚本引擎的核心,完整的IDA插件API,以及所有与Python捆绑在一起的常见的模块。目前,默认原创 2021-09-09 10:08:52 · 4483 阅读 · 1 评论 -
新手如何Reverces(基础ctf教程篇2:如何求解flag)
如何求解fla文章目录如何求解fla1,直接内存获取2.对算法进行逆变操作1,直接内存获取对于一些比较简单的题目,可以通过直接查看内存的方式获取flag。对于这种形式,只需要在比的地方下个断点,然后通过查看内存即刻得到flag。 参考例子:远程动态调试2.对算法进行逆变操作如果一个判断过程的代码如下所示,那么要分析convert的算法,然后分析结果写出对应的逆算法,通过reverse_convert(stardard)方式求得flag...原创 2021-09-06 21:07:23 · 1561 阅读 · 0 评论 -
新手如何Reverces(基础ctf教程篇)
新手如何Reverces(基础ctf教程篇)提示:文章依靠C语言,并且需要了解内存机制文章目录新手如何Reverces(基础ctf教程篇)前言一、关键代码定位1.API断点法2.字符串检索法(1)在IDA中查找字符串二、1.引入库2.读入数据总结前言提示:本文章将从常规的逆向分析流程开始,讲解查找代码段,加密算法识别,后续文章等待更新一、关键代码定位提示:下面讲解的是原理,有的没有讲解具体如何实现,但是当方向明确以后,一切不就变得简单了吗。1.API断点法在windows界面程序逆向中原创 2021-09-04 14:16:01 · 883 阅读 · 0 评论 -
buuctf_SimpleRev 1(算法逆向0r爆破0r动态调试)
ida反汇编:unsigned __int64 Decry(){ char v1; // [rsp+Fh] [rbp-51h] int v2; // [rsp+10h] [rbp-50h] int v3; // [rsp+14h] [rbp-4Ch] int i; // [rsp+18h] [rbp-48h] int v5; // [rsp+1Ch] [rbp-44h] char src[8]; // [rsp+20h] [rbp-40h] __int64 v7; // [r原创 2021-08-29 18:48:30 · 835 阅读 · 0 评论 -
简单逆向31(OD调试,亦或)
使用IDA打开,通过搜索字符串找到主函数:int __thiscall sub_AC2810(void *this){ int v1; // eax int v2; // ecx int v3; // eax char *v4; // esi signed int v5; // edi unsigned int v6; // kr00_4 char *v7; // ecx char **v8; // ecx char *v9; // ecx char *v10;原创 2021-08-23 22:18:26 · 367 阅读 · 0 评论 -
不太简单的简单逆向30(sm4,异性base64,hook)
先运行:惨找个库放进去不报错了但是还是运行不了那就只能静态了:放入IDA:代码很少(假象)sub_411136(后改名为check):很神奇,直接比较了,看下str1,和str2,在str1中交叉引用,因为我们想知道他怎么生成的:能看到它把str2混淆过,后面str1经过了base64加密,但这不是一个正常的base64:_BYTE *__cdecl sub_413090(char *Str){ int k; // [esp+E4h] [ebp-5Ch] int v3原创 2021-08-19 11:46:40 · 928 阅读 · 0 评论 -
简单逆向7(安卓,base64换换表)
jeb打开MainActivity:package com.example.ctf_2019_2;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;imp原创 2021-08-18 12:06:03 · 467 阅读 · 0 评论 -
简单逆向6(安卓,算法逆向,os)
先了解一个关键字NATIVE 静态链接首先用jeb打开:找到MainActivity(Tab反汇编):package com.sec.ctf2;import android.app.Activity;import android.os.Bundle;import android.view.View$OnClickListener;import android.view.View;import android.widget.Toast;public class MainActivit原创 2021-08-16 18:59:45 · 483 阅读 · 0 评论 -
简单逆向23(dnSpy,.net,动态调试)
根据习惯放入IDA:发现不是c语言之类写的,放入exeinfope看一下是.net,通过百度发现可以使用dnSpy等反编译软件使用dnSpy打开:Module处ctrl + f搜索main:找到主函数// Token: 0x06000030 RID: 48 RVA: 0x00002618 File Offset: 0x00001A18 internal unsafe static int main() { string b = "3ACF8D62AAA0B630C4AF43AF3原创 2021-08-14 11:01:15 · 5922 阅读 · 1 评论 -
简单逆向29(pyc反编译,z3,unpack)
诺莫29pyc文件,先反编译成py文件:方法见简单逆向27# uncompyle6 version 3.7.4# Python bytecode 2.7 (62211)# Decompiled from: Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]# Embedded file name: E:\CTF\Geek-python\python2\python2.py原创 2021-08-12 09:02:39 · 418 阅读 · 0 评论 -
简单逆向27(pyc转换,算法逆向,unpack)
诺莫27pyc文件是中间文件,直接执行pyc文件会更快,但不是必须的:py文件转pyc转pyc文件转py:1.直接使用pip install uncompyle6(目前支持python2.6-3.8)2.添加环境变量:将python目录下的script目录设置为环境变量,一般使用pip都设置了的。也可以直接使用命令:path=%path%;%python_home%/script3.使用:cmd代码:uncompyle6 -o target.py resource.pyc或者:原创 2021-08-10 09:41:38 · 474 阅读 · 1 评论 -
简单逆向26(c++函数修饰名,md5,动态调试,算法逆向)
诺莫26开始:放入IDA,找到字符串:找到main函数:signed __int64 main()//重命名{ signed __int64 v0; // rax __int64 v1; // rax const CHAR *v2; // r11 __int64 v3; // r10 __int64 v4; // r9 const CHAR *v5; // r10 signed __int64 v6; // rcx __int64 v7; // rax sig原创 2021-08-08 22:41:28 · 298 阅读 · 0 评论 -
简单逆向25
诺莫25知识点:亦或,查找开始:放入IDA:通过字符串找到主函数int __cdecl main(int argc, const char **argv, const char **envp){ __m128i *v3; // rsi __m128i *v4; // rdi __int64 v5; // rax int result; // eax unsigned __int64 v7; // rax __int64 v8; // rax __int64 v9;原创 2021-08-07 21:46:16 · 219 阅读 · 0 评论 -
TEA加密学习
TEA算法发展史:TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。先说哈菜鸟踩到的坑和一些重点:文本直接复制会有数据丢失,可以使用工具:010Editor复制16进制char* 向 int*转换会影响步长因为密码,明文可能不足长度,所以要初始化,好自动补齐Tea:#include<std原创 2021-08-06 18:28:48 · 727 阅读 · 0 评论 -
不太简单的简单逆向24(xxtea)
开始知识点:1.xxtea解密2.算法逆向1.IDA打开:__int64 __fastcall sub_1400011A0(__int64 a1, __int64 a2){ unsigned __int64 v2; // rbx signed __int64 v3; // rax __int128 *v4; // rax char *v5; // r11 __int128 *v6; // r14 int v7; // edi BYTE *v8; // rsi BY原创 2021-08-06 17:30:48 · 1986 阅读 · 0 评论 -
简单逆向22
诺莫22原创 2021-08-02 09:24:41 · 227 阅读 · 0 评论 -
简单逆向21
诺莫21知识点:动态调试,亦或,爆破开始:放入IDA:int __cdecl main(int argc, const char **argv, const char **envp){ _DWORD *v4; // [esp+1Ch] [ebp-A0h] int v5; // [esp+20h] [ebp-9Ch] int v6; // [esp+24h] [ebp-98h] int v7; // [esp+28h] [ebp-94h] int v8; // [esp+2Ch原创 2021-07-30 17:34:25 · 155 阅读 · 0 评论 -
简单逆向20(z3使用,算法逆向)
诺莫20知识点:z3使用,算法逆向开始:放入IDA:int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // esi unsigned int v4; // kr00_4 char v5; // bl unsigned int v6; // eax char *v7; // edx char v8; // cl int v9; // eax char原创 2021-07-29 16:53:03 · 591 阅读 · 0 评论 -
jeb的基本使用
转:52pj原创 2021-07-28 20:27:32 · 509 阅读 · 0 评论 -
简单逆向18
诺莫18原题:开始:放入IDA:int __usercall wmain@<eax>(int a1@<ebx>){ FILE *v1; // eax FILE *v2; // eax char v4; // [esp+3h] [ebp-405h] char v5; // [esp+4h] [ebp-404h] char v6; // [esp+5h] [ebp-403h] char v7; // [esp+104h] [ebp-304h] cha原创 2021-07-28 15:45:59 · 262 阅读 · 0 评论 -
简单逆向17
诺莫17开始:知识点:栈平衡,算法逆向1.使用IDA打开:原创 2021-07-27 18:17:15 · 126 阅读 · 1 评论 -
简单逆向16(hash,爆破)
诺莫16开始放入IDAint __cdecl main_0(){ DWORD v0; // eax DWORD v1; // eax CHAR String; // [esp+4Ch] [ebp-310h] int v4; // [esp+150h] [ebp-20Ch] CHAR String1; // [esp+154h] [ebp-208h] BYTE pbData; // [esp+258h] [ebp-104h] memset(&pbData, 0,原创 2021-07-26 14:15:58 · 1713 阅读 · 1 评论 -
简单逆向14(RAS)
诺莫14开始:放入Exeinfo:ELF文件放入IDA:sub_96A(&v8, (__int64)&v9);将输入的字符串中的每个字符的ascii码转成两位16进制,存储到v9字符串中,所以也就知道了为什么后文要使用函数将字符串转成16进制的数据有两个函数不懂__gmpz_init_set_str__gmpz_powm查阅了相关资料如下:__gmpz_init_set_str int mpz_init_set_str (mpz_t rop, const cha原创 2021-07-24 20:15:11 · 346 阅读 · 1 评论 -
RSA 算法
加密算法:图中的C是密文,M是明文,E是公钥(E和 φ(N)互为质数),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算解密算法:图中的C是密文,M是明文,D是私钥(私钥由这个公式计算得出E * D % φ(N) = 1),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算,φ(N)是欧拉函数(由这个公式计算得出φ(N) = (P-1)(Q-1))。...原创 2021-07-24 19:27:51 · 907 阅读 · 0 评论 -
简单逆向13(angr,控制流平坦化)
诺莫13开始放入IDA:查看流程视图这是一个控制流平坦化比较复杂的控制台流程,使用原创 2021-07-24 14:02:17 · 648 阅读 · 0 评论 -
去除控制流平坦化的工具deflat.py安装及使用
首先deflat.py需要一个库angr的支持,angr对python27较兼容,这里使用python27进行安装安装angr:方法1:(没有试验过)使用pycharm中的安装库直接安装方法2:原创 2021-07-22 23:09:14 · 1149 阅读 · 1 评论 -
简单逆向12
诺莫12开始放入IDA:int __cdecl main(int argc, const char **argv, const char **envp){ signed int v3; // eax char v4; // al signed int v5; // ecx char v6; // al signed int v7; // ecx char v8; // al signed int v9; // ecx char v10; // al signed原创 2021-07-18 09:51:31 · 175 阅读 · 2 评论 -
简单逆向10(z3-solver)
诺莫10开始:放入IDA:main函数为c++伪代码int __cdecl main(int argc, const char **argv, const char **envp){ __int64 v3; // rax __int64 v4; // rdx unsigned int v5; // ebx __int64 v6; // rdx __int64 v7; // rax __int64 v8; // rax __int64 v9; // rdx __int原创 2021-07-16 13:47:04 · 282 阅读 · 0 评论 -
简单逆向9(动态调试)
诺莫9开始1.PEID打开:不是pe文件,就是FLE文件2.ida打开是64位linux文件3.使用linux运行软件:命令:chmod +w normal9[admin@localhost Desktop]$ ./normal94.IDA打开:int __cdecl main(int argc, const char **argv, const char **envp){ int result; // eax signed int i; // [rsp+8h] [rb原创 2021-07-14 10:32:41 · 456 阅读 · 0 评论 -
简单逆向8
诺莫8开始:使用PEID:不是PE文件使用IDA64打开:关键点在sub_40094C(&s)查看sub_40094C(&s)分析出大概的流程,如图打开两个v8,v9赋值的函数但看*(_DWORD)(4*xxxx)可以看出为整型,修改类型为int数据区域:dword_602120:(v8形参)7A CF 8C 95 8E A85F C9 7A 91 88 A770 C0 7F 89 86 935F CF 6E 86 85 AD88 D4 A0 A2原创 2021-07-13 20:38:16 · 191 阅读 · 3 评论 -
Exception in thread “main“ java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bi
win7 64-bit下,Eclipse运行SWT程序报错:Cannot load 32-bit SWT libraries on 64-bit JVM两种解决方案如下:1.下载64位的swt包(相对方案2,稍微繁琐些)2.下载32位的vm2.1:下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2.2:安装32位的JVM,Window -> Preferences转载 2021-07-13 09:27:34 · 1293 阅读 · 0 评论 -
简单逆向4
诺莫4开始PEID查壳 ,vs写的程序,并且没有壳放入IDA32 :关键点在sub_401090(&buf),并且能看出buf长度小于等于37打开sub_401090(&buf) :代码分析 :主体思路:分别从两个地方取常量数据和0x19做亦或,将输入的flag作为操作码(即数组下标)执行if语句解题:所以我们需要先将比较的数据算出来,然后找到数据域中和所算结果相同的数据下标,在做分析首先找到数据区域(byte_402150,byte_40215原创 2021-07-12 19:44:33 · 203 阅读 · 0 评论