深夜写文——致19岁的自己
虽然明天,不,今天,有早八,但总要等到夜深人静时,戴上耳机,关上台灯,打开背光,在轻柔的音乐声中,在清脆的薄膜键盘声中,才能够沉下心来,想些什么,写点什么,怀念过往,珍惜当下,憧憬未来。(NOTICE:下划线文本处有彩蛋,不要错过o)去年今日 (好像被咕了一天?)我还是一名高三学生,顾主任鼓励班级每一位同学过生日的时候都做一次演讲,也算是为复习迎考的日子增添一抹亮色,给每一位同学一个激励自己、激励大家的机会,自然,It was my turn(密码:numenor)。还记得当时A10联盟联考刚刚结束,我考的很不理想,考试爆炸,却偏偏赶上要在全班同学面前做演讲,双重的压力让我一度崩溃,本应开心的时光,仿佛蒙上了阴影,挥之不去,却也无从逃避。现在想来,对当时的自己,对每一位耐得住寂寞,受得住压力的高三学子,我抱以深深的敬意。高三的一年对我来说是很痛苦的,一次接着一次的联考,我总是因为各种原因,选择性地在理综和数学两门科目上爆炸一门,有时觉得自己考的不错,却又在语文上给我重重一击,几分之差,几十名的距离,让我难以接受,难以接受考试的残酷;难以接受自己的失误;难以接受明明已经尽了最大的努力,却 ...
虚拟机逆向初探
虚拟机保护原理内容转自https://zhuanlan.zhihu.com/p/38028963
基本原理这里的虚拟机当然并不是指VMWare或者VirtualBox之类的虚拟机,而是指的意思是一种解释执行系统或者模拟器(Emulator)。所以虚拟机保护技术,是将程序可执行代码转化为自定义的中间操作码(Operation_Code,如果操作码是一个字节,一般可以称为Bytecode),用以保护源程序不被逆向和篡改,opcode通过emulator解释执行,实现程序原来的功能。在这种情况下,如果要逆向程序,就需要对整个emulator结构进行逆向,理解程序功能,还需要结合opcode进行分析,整个程序逆向工程将会十分繁琐。这是一个一般虚拟机结构:
这种虚拟化的思想,广泛用于计算机科学其他领域。从某种程度上来说,解释执行的脚本语言都需要有一个虚拟机,例如LuaVM,Python_Interpreter。静态语言类似Java通过JVM实现了平台无关性,每个安装JVM的机器都可以执行Java程序。这些虚拟机可以提供一种平台无关的编程环境,将源程序翻译为平台无关的中间码,然后翻译执行,这是J ...
花指令初探
概念简单来说就是通过添加一些垃圾数据导致IDA分析的时候会把这些垃圾数据当成代码阻碍静态分析同时保证该程序能正常运行,我的理解是一般花指令是不会阻碍动态调试的但是却能破坏静态分析。
分类可执行式花指令可执行式花指令指的是能够正常运行的但又不改变原始程序逻辑性的一组无用指令。
这类花指令有如下特点:①可以正常运行;②不改变任何寄存器的值;③反汇编器可以正确反汇编该指令。
这种类别的花指令组合形式很多,常常用在病毒代码的变形引擎中,病毒在传播时通过变形引擎随机产生一组该类别花指令并插入到病毒正常代码中,可以改变病毒的特征码,从而起到变形的作用。
不可执行式花指令(垃圾指令)不可执行式花指令是指被插入到原始代码中但又不改变原始程序逻辑性的一组无用字节。
这类花指令有如下特点:①不可以正常运行;②不改变任何寄存器的值;③反汇编器可能会错误反汇编这些字节。
根据反汇编的工作原理,只有当花指令同正常指令的开始几个字节被反汇编器识别成一条指令时,才能有效破坏反汇编的结果。因此,插入的花指令应当是一些不完整的指令,被插入的不完整指令可以是随机选择的。正因为不可执行花指令有这些特点,该类花指令才能应用到 ...
攻防世界Reverse新手区小结
退役ACMer(其实ACM也才划水了一个多月)艰难入门CTF逆向工程,第一发学习小结。(啥也不会,只能对着IDA出的代码懵逼,天天坐牢)
Hello,CTF考察sprintf函数
可以看出输入一个字符串v9,并判断长度小于等于17,再把v9的每个字符赋值给v4,最后通过sprintf函数将v4通过%x(16进制)输出为Buffer字符串,再通过strcat函数将Buffer字符串给v10,最后将v10与v13进行比较。程序的意思是字符串转为16进制,那么我们只需要逆向把16进制转为字符串就可以了。flag:
insanityshift+F12快速打开string窗口找到flag
python-trade发现附件是一个pyc文件于是通过在线反编译网站得到python代码
12345678910111213141516import base64def encode(message): s = "" for i in message: x = ord(i) ^ 32 x = x + 16 s += chr(x) ...
安卓逆向前置之JAVA学习
花了两个下午粗略看了以下java的基础语法,写了一份备份向的博客,大概能够java的基本语法,变量,对象,方法,各种类的用途,然而能不能看懂安卓开发就另说了(:<)
注:他妈的,初稿丢了,这是补稿,网上的教程讲的实在太详细了,查重率100%。
另注:本次java学习使用的编译器是Eclipse。
再注:感谢 菜鸟教程 - 学的不仅是技术,更是梦想! (runoob.com)
Hello World12345public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}
基础语法基本语法编写 Java 程序时,应注意以下几点:
大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaC ...
TSCTF-J 2021 逆向WP
记得TSCTF-J刚开始的时候我连IDA都没下,easyxor对着代码瞅了半天,幸好ctrl+F5可以直接显示出数组的内容,让我似懂非懂的把签到题过了,赛后重新来看这些题,或许会有一些新的理解吧。
easy-xor新生赛光速入门RE,刚刚下载IDApro之后打开的第一道题。F5查看代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950int __cdecl main(int argc, const char **argv, const char **envp){ _BYTE *v3; // esi int i; // edx int v5; // eax char *v7; // eax char v8; // [esp-4h] [ebp-Ch] char v9; // [esp+0h] [ebp-8h] char v10; // [esp+0h] [ebp-8h] sub_401020("Welcome to TSC ...
RC4加密算法学习笔记
原理原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。
关键在于密钥流生成器的理解,个人认为该加密手段是通过生成密钥对256取模后得到下标的不确定性从而达到混乱和扩散的目的。
密钥生成先放上一张原理图:
在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将S-box和明文进行xor运算,得到密文,解密过程也完全相同。
123456789101112131415/*初始化函数*/void rc4_init(unsigned char*s,unsigned char*key, unsigned long Len){ int i=0,j=0; unsigned char T[256]={0}; unsigned char tmp=0; for(i=0;i<256;i++) { s[i]=i;//s_box初始化为[0,255 ...
NCTF2021逆向WP(部分)
签到题一键F5直接获得flag:NCTF{We1come_2_Reverse_Engineering}
ShadowbringerC++逆向,反编译后乍一看头皮发麻:123456789101112131415161718192021222324252627282930313233343536int __cdecl main(int argc, const char **argv, const char **envp){ char v4[16]; // [rsp+20h] [rbp-60h] BYREF char v5[15]; // [rsp+30h] [rbp-50h] BYREF char v6; // [rsp+3Fh] [rbp-41h] BYREF char v7[16]; // [rsp+40h] [rbp-40h] BYREF char v8[16]; // [rsp+50h] [rbp-30h] BYREF char v9[16]; // [rsp+60h] [rbp-20h] BYREF char v10[32]; // [ ...
IDApro自带动调初探
由于不会汇编,每次对着Ollydbg或者恶心的Linux自带的GDB调试的时候都一脸懵逼,由于第一次尝试remote Linux debugger时一直连不上直接给我劝退了,后来经过几天的坐牢和学长帮助发现是vmware的虚拟网卡被防火墙给屏蔽了,关闭防火墙重新安装vmware终于可以实现虚拟机与主机的互ping之后,萌新开始了第一次动调。
先拿一道攻防世界题举例:no-string-attached反编译之后发现关键代码:12345678910111213141516void authenticate(){ wchar_t ws[8192]; // [esp+1Ch] [ebp-800Ch] BYREF wchar_t *s2; // [esp+801Ch] [ebp-Ch] s2 = (wchar_t *)decrypt((wchar_t *)&s, (wchar_t *)&dword_8048A90); if ( fgetws(ws, 0x2000, stdin) ) { ws[wcslen(ws) - 1] = 0; ...
HECTF-reverse部分writeup
因为期中考试(寄)所以很多题目没来得及复现,汇编也没学,感觉自己又变菜了qwq
hard直接扔进Ida64查字符串/查汇编/查代码都可以得到flag:HECTF{HElLo_RRRRe}
baby_upx尝试用指令脱壳失败,本来打算手动脱壳,但是后来偶然发现了upx-3.9.6封装好的一个脱壳软件,居然给脱出来了。反编译得到源代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // eax char String[26]; // [esp+1Eh] [ebp-46h] BYREF int v6; // [esp+38h] [ebp-2Ch] _DWORD v7[5]; // [esp+3Ch] [ebp-28h] BYREF char *v8; // ...