simple系列
simple找到main函数
在debugger前下断点调试
弹出反调试,看看报错内容
某处指令调用内存0x41A024失败
静态分析的内存地址和动态调试时不一样
找到程序开始的地方下断点
慢慢f7往下调试(其实也可以从关键函数main0往上交叉检索)
然后遇到卡调试的就C+n就好了
无论怎么调试都会触发错误
它为什么会内存地址整体变更
如何才能让他不变更内存地址,或者说让他指向正确的内存地址
找找反调试
https://www.cnblogs.com/LyShark/p/13525917.html c++反调试学习
https://bbs.pediy.com/thread-225740.htm#msg_header_h1_0
这题脱壳之后被破坏了,需要修复。。。
直接用未脱壳的调试
这里学习一下main函数传参
123456789#include<stdio.h>int main(int argc, char** argv,const char **envp){ printf("\n%s", argv[1]); printf ...
normal系列
normal1elf文件,ida64打开,找到main 函数
关键加密函数
其实就是变种的base64 带了个奇偶异或
按照base64 把3字节分割成4个并且补0
切回来就好了
1234567891011121314151617181920212223242526data='OBuf aa21 Td86 rWS8 Wob8 iGhZ Yocb r5vx ZfcC oWv3'data_l=list(data)base64_c='nopqrstuvwxyzabcdefghijklm0123456789ABCDEFGHIJKL+/MNOPQRSTUVWXYZ'base64_cl=list(base64_c)serial=[]for i in range(len(data_l)): for j in range(len(base64_cl)): if data_l[i]==base64_cl[j]: serial.append(j)ascii_list = [ ('{:0>6 ...
simple系列
simple是c++,麻了,好多没见过的函数,甚至不知道数据在哪
这种好像是flag自输出的类型
然后调试进去
发现一些函数有变化,%d的值是给到了v9这个位置的,而v9是个指针,原数据是simple.exe,就是文件后缀
关键部分在这里嗷,这个其实有一点像是在走迷宫
照着switch的选项走,避开lost就行了。下面的是data
如何求最优解
1234#[4=1x4, 24=4x6, 40=28+4x3, 44=28+4x4, 52=28+4x4, 56=28x2, 60=28x2+4, 64=28x2+4x2,#68=28x2+4x3, 72=28x2+4x4, 80=28x2+4x6, 100=28x3+4x4, 108=28x3+4x6, 116=28x4+4, 120=28x4+4x2, 136=28x4+4x6, 152=28x5+4x3,#156=28x5+4x4, 160=28x5+4x5, 164=28x5+4x6, 168=28x6, 172=28x6+4]
关键在于怎么处理这些数据,这题比较类似走迷宫,只不过没有迷宫图
这些数据是对映在data里面的1还 ...
simple系列
simple老pyc了
12345678910111213141516171819202122232425262728293031323334import syslookup = [196, 153, 149, 206, 17, 221, 10, 217, 167, 18, 36, 135, 103, 61, 111, 31, 92, 152, 21, 228, 105, 191, 173, 41, 2, 245, 23, 144, 1, 246, 89, 178, 182, 119, 38, 85, 48, 226, 165, 241, 166, 214, 71, 90, 151, 3, 109, 169, 150, 224, 69, 156, 158, 57, 181, 29, 200, 37, 51, 252, 227, 93, 65, 82, 66, 80, 170, 77, 49, 177, 81, 94, 202, 107, 25, 73, 148, 98, 129, ...
simple系列
simple10这题pyc,网站直接解
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import stringletters = list(string.ascii_letters) + list(string.digits) + ['+', '/']print(letters)dec = 'FcjT CgD1 EffE m2rP C3bT yL5W u2bK BI9K AZrw FgrU ygHN' #对比数据def encode(shuru): str_ascii_list = [ ('{:0>8}').format(str(bin(ord(i))).replace('0b', '')) for i in shuru ] #{:0>8}为数字补零,填 ...
simple系列
simple9pyc文件
先试着用网站脱脱看,可以的,脱了乱码
用安装过uncompyle6的cmd脱壳,在文件所在目录输入
uncompyle6 -o simple9.py simple9.pyc
1234567891011121314151617181920212223242526print ("Welcome to Processor's Python Classroom Part 2!\n")print ("Now let's start the origin of Python!\n")print ('Plz Input Your Flag:\n')enc = input()len = len(enc)enc1 = []enc2 = ''aaa = 'ioOavquaD b}x2ha4[~ifqZaujQ#'for i in range(len): if i % 2 == 0: enc1.append(chr(ord(enc[i ...
simple系列
simple8这是一道迷宫题
说实话,做过一道,但是是看着wp做的
所以不会做捏
这次没有wp
感觉自己像是废b
其实这题很简单
没有什么加密,也没有什么壳。
也没有叠加,就是一个迷宫而已
因为我是废b而已QAQ
跟着main函数跳转到关键函数
找到地图和加密部分
输入wasd分别是在地图上上下左右移动,60是地图的列数,也就是y
行数则是19
然后还原出地图
为了保证地图的点对的上,我给点加了空格
然后就直接看着地图做就行
flag:wwwwaaaaaaaaaaaaaasssssssssssssssddddddddddddddwwwwwwwaaaaaaaaaaaa
其实还可以直接算
让最终答案等于1268就行
我是废物
但是不能开摆嗷,不然还是废物
simple系列
simple7是我最讨厌的位移捏
我看看,emmmm,加法还原。。。
要不直接爆破吧
出flag了。麻了虽然出来了,但是还是不是很懂,因为这是我对着数据算的,纯纯喜剧人。明天再看看
FZQ{Za_Jiang_MiAN}
爆破脚本来咯
因为这个加密方式,加密数据全部都很清楚了,用这种方式其实对付一下是非常快的
1234567891011121314151617181920212223data=[0x000000A0 , 0x000000E6 , 0x0000007A , 0x0000011E , 0x000000E6 , 0x00000090 , 0x00000122 , 0x000000D0 , 0x000000F0 , 0x00000090 , 0x0000012C , 0x000000D8 , 0x00000122 , 0x000000F4 , 0x000000F0 , 0x00000064 , 0x00000100 , 0x00000136]zd = ['a', 'b', 'c ...
simple系列
simple6查壳,mingw
为什么这里的数据是双字储存的呢,有点迷,也没有位移操作什么的
难道说要我自己取低八位?
看来是不用捏
我直接删掉了
123456789101112131415ary=[0x17, 0x16, 0x1A, 0x1A, 0x019, 0x19, 0x19, 0x1A, 0x1B, 0x1C, 0x1E, 0x1E, 0x1D, 0x1E, 0x20, 0x20, 0x21, 0x20]ary1=[0x80, 0xA9, 0x8E, 0xE1, 0x88, 0xBD, 0xD4, 0xA5, 0x88, 0xBF, 0xC6, 0x99, 0x76, 0xAB, 0x96, 0xAF, 0x12, 0xCB]for i in range(18): ary1[i]=(ary1[i]+i)/2 #得到修改过的arr值 ary1[i]= ary1[i] + ary[i] % 17 ary[i]=chr(ary[i]) ary1[i]=chr(int(ary1[i]))#处理浮点位ary1="".join(ary1)pr ...
simple系列
simple5查壳,mingw文件
easy
12345678ary=[0x55, 0x0F, 0x5E, 0x25, 0x6D, 0x2C, 0x7A, 0x3F, 0x60, 0x21, 0x7E, 0x39, 0x76, 0x39, 0x7D, 0x22, 0x76, 0x3F, 0x72, 0x37, 0x68, 0x49, 0x34]ary1=[19,0x55, 0x0F, 0x5E, 0x25, 0x6D, 0x2C, 0x7A, 0x3F, 0x60, 0x21, 0x7E, 0x39, 0x76, 0x39, 0x7D, 0x22, 0x76, 0x3F, 0x72, 0x37, 0x68, 0x49, 0x34]for i in range(23): ary[i] ^= ary1[i] ary[i]=chr(ary[i])print(ary)strary="".join(ary)print(strary)
出flag:FZQ{HAVE_A_GOOD_TIME_!}
麻了今天好多课