0x1 apk.apk
反编译之后看java源码,涉及到的关键函数有点多,但是耐心的分析下代码程序的逻辑并不难,通过uc这个函数可以知道程序对“XRL}D6hy4yfE7tuF6{”这个字符串做了加密处理,下面这段程序就它的处理方法
|
|
把这段算法逆向回去就能得到正确的flag:
|
|
最后得到的结果是:KEY{Q1hl3lfR0ghS1}
0x2 Win.exe
载入IDA分析,找到关键代码处然后分析算法:根据程序的逻辑可以看出来,flag由两部分组成,上部分是由byte_415767这个数组中的字符串组成,并且根据v9这个数组里的值取下标组成上半部分flag,下半部分flag可以直接得到:1024}


解密代码如下:
运行后法人结果为:KEY{e2s6ry3r5s8f61024}
0x3 defcamp
用IDA进行反汇编分析,找到关键代码,可以看到需要用户输入正确的password

函数sub_40074D是一个关键函数,里面有两个for循环,第一个for循环取qword_601080地址上的数据存入v6这个数组,第二个for循环是用v6和v9进行比较,数组v9的值为:5 2 7 2 5 6

但是在主函数中的for循环里面也调用了qword_601080,经过分析可以知道:v3=109+v9[i],所以最后得到的结果为:114 111 116 111 114 115,password就是:rotors
0x4 catalyst-system
用IDA反汇编,得到如下的伪代码

需要输入username和password,下面5个自定义函数分别对username和password做了相应的处理

将12个字节长的usrname分成3个4字节的int型并做成了方程组:
最后解出:a = 1635017059 b = 1953724780 c = 1868915551
即username:catalyst_ceo
继续分析sub_400977这个函数

v2这个数组里存的是password,这里v2是等于一个随机数加上一个已知的数得到的,随机数有固定的随机种子srand(a1),a1是固定的所以产生的随机数也是固定的,这里可以写个C程序跑出来:
|
|
最后产生的10组数为
计算出password的值后跟数组byte_6020A0数组中的值进行异或
|
|
最后得到的结果为:ALEXCTF{1_t41d_y0u_y0u_ar3__gr34t__reverser__s33}