normal系列
normal11这题目和以往的不太一样,虽然同为elf文件
但是在main函数的内容里的加密是不执行的
v13此处是恒为0的
回去main函数检查一下
一般main函数调用之前会先调用init,最后用fini收尾
linux编程之main()函数启动过程【转】 - sky-heaven - 博客园 (cnblogs.com)
用二进制方式打开文件,可以发现两个elf文件头
把里面的文件提取出来重新编译,得到一个新的文件
encrypt处有个smc自解密,下图是快速patch法
用idapython脚本逆掉,ida7.5和7.6会对PatchByte 不兼容,从idc_bc695 import 一下
1234from idc_bc695 import *addr=0x0000000000000AF0for i in range(310): PatchByte(addr+i+20,Byte(addr+i+20)^i)
对着函数 u 取无符号,p修复就好了
解出完整加密
再写个提取数据的小脚本
1234567addr=0x0000000000000B46arr=[]for ...
normal系列
normal10elf文件捏
在解flag前有一个掷骰子的小问题,可以不用管,patch掉或者直接C+n跳过
逻辑没什么难的(虽然我看不太懂)调试一下就知道大概的逻辑了
输入flag,flag加密对比
输入长度为32的flag跟进看看
输入流被赋值给v34,v34经过不同加密对比验证flag
题目里说了是math problem 那就上z3约束器求解咯
写个z3脚本
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401 ...
normal系列
normal9elf逆向
特别简单
1234567data=[0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 92, 18, 38, 11, 93, 43, 11, 23, 0, 23, 43, 69, 6, 86, 44, 54, 67, 0, 66, 85, 126, 72, 85, 30, 0, 0]data1=list("hgame{Y0u_mayb3_need_th1s_0ne!!!!!}")flag=''for i in range(35): flag+=chr(data[i]^ord(data1[i]))print(flag)
hgame{X0r_1s_interest1ng_isn’t_it?}
normal系列
normal8这题是一道elf逆向
进入到关键加密部分encode的部分
看样子没法通过肉眼或者直接算出来。
要么直接爆破,要么z3求证,这本质上也可以看作多元方程
学了z3都没怎么用过,用下试试
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152from z3 import *datan=[0x00000008, 0x00000001, 0x00000007, 0x00000001, 0x00000001, 0x00000000, 0x00000004, 0x00000008, 0x00000001, 0x00000002, 0x00000003, 0x00000009, 0x00000003, 0x00000008, 0x00000006, 0x00000006, 0x00000004, 0x00000008, 0x00000003, 0x00000005, 0x00000007, 0x00000008, 0x00000 ...
normal系列
normal7又是一道安卓题
先老样子进入mainactivity
找到输入(原来是我的jeb有问题)
解析一下啊
进入seclover查看加密内容
上面的一串东西有点点像b64变表
转为二进制,字节组合
用b64变表的脚本试一下
123456789import base64data='すひ6ねτ3/7しはξ2すつιのν92φτひ/なしひξねたさ+ψιρ;;'old='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'new='αβγδεζηθικλμνξοπρσ89+/さしすせそたちτυφχψω012345てとゐなにぬねの67つっはひふへほゑま'result=''for i in range(len(data)): result+=old[new.find(data[i])] #对照新的换成旧表result= str(base64.b64decode(result))print(result)
clover_Sec ...
normal系列
normal6apk文件,丢入jeb分析
找到他的activity,键入
找到win 的部分(为什么是smali码)真头大啊
Android逆向基础 | 冰封承諾 (bfchengnuo.com) 给自己的smali入门一下
算了。先抓so文件出来看看吧
这题里面有一个迷惑性的flag is not here
名字和mainactiviy的包名一模一样,很难不让人怀疑是so文件捏。但实际上不是,里面的aflagisnothere 已经出卖它了
解析完了,不过那个x有点把我绕晕了捏
脚本
1234567data1 = "vrt~rzey{vvyt{v"data2= "!:#"+chr(0x24)+"%&()+-"flag=''v9 = len(data2) + 47for i in range(len(data1)): flag += chr(v9-data2.find(chr(ord(data1[i]) ^ 0x5f)))print(flag)
flag{2 ...
normal系列
normal5这题是个elf文件
先进入main函数
找到关键加密点
用idapython提取数据(因为15000实在是太长了)
反着来就行了,没什么难点就是提数据,会写脚本很好搞
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879data=[0xFFFFFFC4, 0x00000034, 0x00000022, 0xFFFFFFB1, 0xFFFFFFD3, 0x00000011, 0xFFFFFF97, 0x00000007, 0xFFFFFFDB, 0x00000037, 0xFFFFFFC4, 0x00000006, 0x0000001D, 0xFFFFFFFC, 0x0000005B, 0xFFFFFFED, 0xFFFFFF98, 0xFFFFFFDF, 0xFFFFFF94, 0xFFFFFFD8, 0xF ...
normal系列
normal4这题是个upx加密
脱壳完了之后进入main函数
这题动调会导致地址变更,需要进行文件修复。(直接写也可以)
关键内容
数据储存方式有一点点怪,不过在hex窗口中可看出完整的字符串
解读一下,写出脚本
12345678910111213141516171819202122232425262728293031323334data = '2a49f69c38395cde96d6de96d6f4e025484954d6195448def6e2dad67786e21d5adae6's = [0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, ...
normal系列
normal3这题是个elf的文件
ida打开
找到关键加密部分
这里是把flag丢入一个递归函数,将data的奇数和偶数位分开丢入s1
写脚本也不难,按照打乱顺序的方式检索再丢回来就好了
123456789101112131415data= list("bcec8d7dcda25d91ed3e0b720cbb6cf202b09fedbc3e017774273ef5d5581794")string_flag = list("bcec8d7dcda25d91ed3e0b720cbb6cf202b09fedbc3e017774273ef5d5581794")x=[0]def func1(a): if (a<=63): string_flag[a] = data[x[0]] #将data中的乱序按照原题目递归的方式送入flag中 x[0]+=1 func1(2*a+1) #奇数 func1(2*(a+1)) #偶数递归func1(0)flag = ""for i in string_flag: flag = flag ...
normal系列
normal2静态分析,修饰一下
步入关键加密位置(太长了就不丢图了)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173__int64 __fastcall encode1(unsigned __int8 *Buffer, ...