Month: November 2018

nctf_2018 re方向 第三题 Some Boxes

环境配置 系统 : Windows xp 程序 : re300 要求 : 输入口令 使用工具 :IDA 开始分析 在ida中载入程序并查看其伪c代码: __int64 __fastcall main(__int64 a1, char **a2, char **a3) { signed int tmp_ch; // eax@2 int index; // [sp+8h] [bp-8h]@1 int len_mystr; // [sp+Ch] [bp-4h]@1 init_and_output_4007D9(); read(0, my_str, 1000uLL); len_mystr = strlen(my_str); for ( index = 0; index < len_mystr; ++index […]

nctf_2018 re方向 第五题 基本操作 ~Reverse Version.~

环境配置 系统 : Windows xp 程序 : ds 要求 : 输入口令 使用工具 :IDA / gdb-peda 开始分析 在ida中载入程序并查看其伪c代码: __int64 __fastcall main(__int64 a1, char **a2, char **a3) { __int64 result; // rax@3 puts(“Input flag:”); __isoc99_scanf(“%64s”, my_str601100); tmp_601064 = 0; sub_400666(0); if ( !strcmp(&s1, “bcec8d7dcda25d91ed3e0b720cbb6cf202b09fedbc3e017774273ef5d5581794”) ) { memset(&s1, 0, 0x80uLL); tmp_601064 = 0; sub_4006BE(0, 0LL); if ( !strcmp(&s1, […]

nctf_2018 re方向 第二题 后门后门后门

环境配置 系统 : Windows xp 程序 : re0.exe_021a92d31ba30b216736eabbd9919f7b 要求 : 输入口令 使用工具 :IDA 开始分析 拖入ida查看反汇编伪c代码: __int64 __fastcall main(__int64 a1, __int64 a2) { __int64 v2; // rdx@1 __int64 v3; // rdx@2 __int64 v4; // rcx@2 __int64 v5; // r8@2 int c; // [sp+24h] [bp-Ch]@2 int b; // [sp+28h] [bp-8h]@2 int a; // [sp+2Ch] [bp-4h]@2 _main(); welcome(); […]

nctf_2018 re方向 第一题 Our 16bit wars

环境配置 系统 : Windows xp 程序 : asm.exe 要求 : 输入口令 使用工具 :IDA / vc6 / c32asm 开始分析 这是一个16位的汇编语言小程序,在xp可以直接打开。我们将程序拖入ida: dseg:0000 dseg segment para stack ‘DATA’ use16 dseg:0000 assume cs:dseg dseg:0000 aInputFlagCorre db 0Dh,0Ah dseg:0000 db ‘$Input Flag:$Correct!$Wrong Flag!$@’,0 dseg:0076 db 0C9h ; dseg:0077 db 68h ; h dseg:0078 db 8Ah dseg:0079 db 0C8h ; dseg:007A […]

nctf2018 pwn方向 第一题 sendyouflag

环境配置 系统 : Windows xp / Kali 程序 : sendflag 要求 : 输入口令 使用工具 :IDA 开始分析 这是一个简单的题目,直接在ida中查看其伪c代码: int __cdecl main() { char v1; // [sp+8h] [bp-10h]@1 int v2; // [sp+Ch] [bp-Ch]@1 puts(“WELCOME TO PWN”); puts(“I WILL SEND YOU FLAG”); puts(“BUT YOU SHOULD SEND ME SOME ‘a'”); __isoc99_scanf(“%9s”, &v1); if ( v2 == ‘aaaa’ ) { […]

南京邮电大学网络攻防训练平台 RE方向 第五题 maze

环境配置 系统 : Windows xp 程序 : maze 要求 : 输入口令 使用工具 :IDA 开始分析 我们用ida载入程序,查看生成的伪代码: __int64 __fastcall main(__int64 a1, char **a2, char **a3) { signed __int64 index; // rbx@4 signed int tmp_ch; // eax@5 bool is_ok_or_not; // bp@5 bool res; // al@8 const char *res_str; // rdi@19 __int64 line; // [sp+0h] [bp-28h]@1 line = 0LL; […]

南京邮电大学网络攻防训练平台 pwn方向 第一题 When did you born?

环境配置 系统 : Windows xp / Kali 程序 : when_did_you_born.zip 要求 : 输入口令 使用工具 :IDA 开始分析 作者直接给了一个c源程序给我们,那么就一起来看看它的内容: #include <stdio.h> struct Student { char name[8]; int birth; }; int main(void) { setbuf(stdin, 0); setbuf(stdout, 0); setbuf(stderr, 0); struct Student student; printf(“What\’s Your Birth?\n”); scanf(“%d”, &student.birth); while (getchar() != ‘\n’) ; if (student.birth == 1926) { printf(“You […]

南京邮电大学网络攻防训练平台 RE方向 第十题 480小时精通C++

环境配置 系统 : Windows xp 程序 : cpp 要求 : 输入口令 使用工具 :IDA 开始分析 使用file指令发现这是一个64位的程序: ➜ playground file cpp cpp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=bd6f0292f6070a3fffd3a9ecf60203bccfc7ac26, not stripped 在64位环境linux上运行效果如下: root@kali:~/下载# ./cpp The Encrypted Flag is: 62646163734e346a6f60715f673c6e5b4561777c337657635b7831717b5f74447577297d 程序只给出了加密后的数据,看来我们只能自己在程序中寻找加密函数进行分析了。 得到关键数据 首先,我们根据其输出格式: printf(“%02x”, *((_BYTE *)&v6 + i)); 我们编写如下python代码还原出c风格字符串: […]

《IDA pro权威指南》 读书笔记

《IDA pro权威指南》 内容提要 本书共分为六部分,首先介绍了反汇编与逆向工程的基本信息和IDA pro的背景知识,接着讨论了IDA pro的基本用法和高级用法,然后讲解了其高扩展性及其在安全领域的实际应用,最后介绍了IDA的内置调试器。 本书适合IT领域的所有安全工作者阅读。 第四章 IDA入门 LDB文件 通常人们说的IDA数据库,指的是IDB文件。是由IDA分析文件时产生的:.id0,.id1,.nam和.til这四个文件压缩而成的。 IDA一旦为某个可执行文件创建数据库,它就不用访问可执行文件,除非希望使用IDA的集成调试器调试可执行文件本身。 在分析一个恶意软件样本时,只需在分析人员之间传递相关数据库,而不必传递可执行的恶意文件本身。 第七章 反汇编操作 IDA提供的一项最强大的功能能够帮助你轻松操作反汇编代码,在其中添加新的信息或重新格式化一个代码清单,以满足你的特殊要求。 基本代码转换 将数据转换为代码 代码转换为数据 指定一个指令序列为函数 更改现有函数的起始或结束地址 更改指令操作数的显示格式 无论你出于什么原因希望对汇编代码重新格式化,这个过程都相当简单。在重新格式化之前,首先删除其当前的格式。右击你希望取消的项目,在结果上下文菜单中选择Undefine,即可取消函数、代码、或者数据的定义。取消定义将会得到未分类的字节。我们几乎可以以任何方式重新对它们进行格式化。 基本数据转换 指定数据大小 处理字符串 指定数组 在单击数据可快速选择需要转换的类型,或者在Edit菜单中选择具体的操作。 第九章 交叉引用与绘图功能 ida有两种基本的交叉引用,代码交叉引用和数据交叉引用,代码交叉引用都与一种方向表示法有关,所有的交叉引用都是在一个地址引用另一个地址。 代码交叉引用 代码交叉引用用于表示一条指令将控制权转交给另一条指令。在ida中,指令转交控制权的方式叫做流(flow)。ida有三种基本流:普通流、跳转流和调用流。 数据交叉引用 数据交叉引用用于跟踪二进制文件访问数据的方式。 读取交叉引用 读取交叉引用用于表示访问的是某个内存位置的内容。 写入交叉引用 写入交叉引用指示了修改变量内容的程序位置。写入交叉引用使用后缀w。 (*)一般而言,以一个程序指令字节为目标的写入交叉引用表示这是一段自修改代码。 偏移量交叉引用 偏移量交叉引用,它表示引用的某个位置的地址。 交叉引用列表 双击交叉引用地址,反汇编窗口将跳转到交叉引用的源位置。查看某个位置的交叉引用完整列表,将光标放在一个或多个交叉引用的目标地址上,并选择View->Open Subviews->Cross References,即可打开指定位置的交叉引用完整列表。(热键Ctrl+x) Hex-Rays 中的交叉引用列表 在伪c代码界面,将光标放在感兴趣的目标上,右击选择Jump to xref即可。 函数调用 有一种交叉引用列表专门处理函数调用,选择View->Open Subviews->Function calls即可打开该窗口。上半部分显示调用当前函数的位置。下半部分显示了当前函数做出的全部调用。 […]

南京邮电大学网络攻防训练平台 RE方向 第七题 你大概需要一个优秀的mac

环境配置 系统 : Windows xp 程序 : xor 要求 : 输入口令 使用工具 :IDA 开始分析 首先对于不明的文件肯定是拖入linux下用file程序分析: xor: Mach-O 64-bit x86_64 executable 发现这个是mac下的可执行文件,我们手上没有mac,姑且用ida静态分析看看。载入程序,直接发现了main函数: int __cdecl main(int argc, const char **argv, const char **envp) { char my_str; // [sp+40h] [bp-70h]@1 __int64 v5; // [sp+A8h] [bp-8h]@1 v5 = *(_QWORD *)__stack_chk_guard_ptr; memset(flag, 0, 0x64uLL); memset(&my_str, 0, 0x64uLL); scanf(“%s”, &my_str); if […]