本文为原创文章,转载请注明出处!
第一道(APK)
Re100
下载下来发现没有后缀,IDA载入 发现是apk文件
直接载入jeb分析 找到关键代码 右键反编译这个类(或者可以按快捷键Tab)
先判断我们输入的字符串(记作input)长度是否小于5 若成立 则输出“tryagain!”
不成立的话将input进行逆序 然后md5加密接着进行base64编码最后与
“NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=“
进行比较 若相同 则输入正确
得到}321nimda{galflj,逆序一次得到jlflag{admin123}
第二道(PE文件)
ransomware
0x01:
PEiD查壳无壳运行之后也没中毒 无毒
0x02:
运行一下看看 可用的只有一个输入框和一个按钮(Decrypt),这里可以通过Restorator进行分析
随意输入123456789 点击Decrypt 弹出对话框,看到关键点
一个是触发的MessageBox (通过下API断点)
一个是关键字符串 Wrong,The password is error
两种方法都可以定位到关键代码 (通过搜索ASCII字符串),下边采用API断点进行定位
0x03
先载入Olydbg分析一波,右键任意空白处或者直接(Ctrl+ N)
或者在命令栏中输入bpGetDlgItemTextA,bp MessageBoxA
下好断点之后,直接F9运行,随意输入12456789,程序会中断到这里
选中堆栈窗口buffer这一行 右键数据窗口中跟随
接着调试执行到返回(快捷键Ctrl+ F9)
这时可以看到数据窗口出现了我们的input123456789
接着F7 然后F8单步向下分析即可
具体分析结果:
1.程序先判断我们的输入是否等于18
2.关键代码就是地址00AE12A3 这个call
OD分析不方便叙述,还是用IDA吧
0x04
可以直接shift+F12找关键字符串,也可以像下边这样
双击DialogBoxFunc
接着F5进行分析
所以我们只需byte_404000[]提取出来 与0xCC进行异或就可以得到flag
有一个简单的办法 就是选中所有数据 shift + E 即可
提取出的直接是C代码
最后得到flag{1_dO_n0t_wAnna_cry}
第三道(ELF文件)
cracking_game载入IDA,Shift + f12 双击Bingo!....
双击通过Xref查找引用Bingo处(sub_4E0)
接着按下空格切换成文本模式
代码向上翻 分析可知sub_4E0就是关键但是发现不可以使用F5
OptionàGeneralà,勾选上Stackpointer,然后就可以看到多了一列绿色的
然后alt+k可以修改
原来数值是0x2C改为0x0就可以
int__cdecl sub_4E0(inta1)
{
intv1;//ST18_4
intv2;//ST1C_4
intv3;//ST20_4
intv4;//ST24_4
intv5;//ST28_4
intv6;//ST2C_4
intresult;//eax
intv8;//[esp-10h] [ebp-3Ch]
intv9;//[esp-Ch] [ebp-38h]
intv10;//[esp-Ch] [ebp-38h]
intv11;//[esp-8h] [ebp-34h]
intv12;//[esp-8h] [ebp-34h]
intv13;//[esp-4h] [ebp-30h]
intv14;//[esp-4h] [ebp-30h]
intv15;//[esp+0h] [ebp-2Ch]
intv16;//[esp+4h] [ebp-28h]
intv17;//[esp+8h] [ebp-24h]
intv18;//[esp+Ch] [ebp-20h]
unsignedintv19;//[esp+10h] [ebp-1Ch]
int*v20;//[esp+20h] [ebp-Ch]
v20=&a1;
v19=__readgsdword(0x14u);
__printf_chk(1,&unk_A50,aCanYouSolveThi,v8,v9,v11,v13,v15,v16,v17,v18);
__printf_chk(1,"Giveme the flag please: ",v1,v2,v3,v4,v5,v6,v16,v17,v18);
__isoc99_scanf("%x%x %x",&v16,&v17,&v18);
if((((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B|((((((((((((((((((v18^0x63074EB7)-257813895)^0x3D898713)-515561400)^0xD4A1204D)
-309222932)^0xDB034E6B)
-1757999315)^0x85AEAF52)
+551686536)^0xCDC4D471)
+1687331817)^0x5BF4CECF)
+686778677)^0x97C13118)
-1982126587)^0x5B589A)
+1689812494)^0xDF2FFB19|(((((v16+929931831)^0x5039B3AD)+427557174)^0x1363F241)
-1960340062))
puts("Hmm...");
else
__printf_chk(
1,
"Bingo!The flag is flag{subflag0:subflag1:subflag2}`n",
(((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B,
(((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031)^0x80CAFC7B,
v10,
v12,
v14,
((((((((((((((((((v17+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6)
+1267464377)^0xBB5D6AFF)
+1051920565)^0x3C5A9BE1)
-1324494254)^0x9D91B40F)
-1113157154)^0x5D8ACD6E)
+1467566340)^0x481EE77)
-754063826)^0x5702EC35)
+1739736031,
v16,
v17,
v18);
result=0;
if(__readgsdword(0x14u)!=v19 )
sub_A20();
returnresult;
}
很明显,程序对输入的三个数,进行一系列的加减和异或,那么我们只需要将+换成- 逆向操作就好了
计算代码:
intv0 =((((((((((((((((((((0^0x80CAFC7B)-1739736031) ^0x5702EC35)+754063826)^0x481EE77)-1467566340)^0x5D8ACD6E)+1113157154)^0x9D91B40F)+1324494254)^0x3C5A9BE1)-1051920565)^0xBB5D6AFF)-1267464377)^0x2A3457E6)-1299160922)^0x74A4134B)+907520011)^0x58E7773A)-1514584764);
intv1 =(((((((((((((((((((0^0xDF2FFB19)-1689812494)^0x5B589A)+1982126587)^0x97C13118)-686778677)^0x5BF4CECF)-1687331817)^0xCDC4D471)-551686536)^0x85AEAF52)+1757999315)^0xDB034E6B)+309222932)^0xD4A1204D)+515561400)^0x3D898713)+257813895)^0x63074EB7);
intv2 =(((((0+1960340062)^0x1363F241)-427557174)^0x5039B3AD)-929931831);
if((((((((((((((((((((v0+1514584764)^0x58E7773A)-907520011)^0x74A4134B)+1299160922)^0x2A3457E6) +1267464377)^0xBB5D6AFF) +1051920565)^0x3C5A9BE1) -1324494254)^0x9D91B40F) -1113157154)^0x5D8ACD6E) +1467566340)^0x481EE77) -754063826)^0x5702EC35) +1739736031)^0x80CAFC7B|((((((((((((((((((v1^0x63074EB7)-257813895)^0x3D898713)-515561400)^0xD4A1204D) -309222932)^0xDB034E6B) -1757999315)^0x85AEAF52) +551686536)^0xCDC4D471) +1687331817)^0x5BF4CECF) +686778677)^0x97C13118) -1982126587)^0x5B589A) +1689812494)^0xDF2FFB19|(((((v2+929931831)^0x5039B3AD)+427557174)^0x1363F241) -1960340062))
{
printf("%x",v0);
printf("%x",v1);
printf("%x",v2);
}
根据v0,v1,v2的输入顺序进行排序最后得到:
flag{e698830d:8dd70651:c1ecd292}
题目下载链接:
第一道:
https://pan.baidu.com/s/1bPZnjEXFODiZEAmegjYcPg密码: 9yjv
第二道:
https://pan.baidu.com/s/1Qy_uL1H9LvChcFejAkGmlA密码: ti5n
第三道:
https://pan.baidu.com/s/1mBlcZ5AwQ9GiIsmbbn3c5w密码: 2mu4
课程推荐时间(via合天网安实验室)
1、逆向工具大全
http://www.hetianlab.com/cour.do?w=1&c=C9d6c0ca797abec2016080315291800001
2、逆向游乐园
http://www.hetianlab.com/cour.do?w=1&c=C9d6c0ca797abec2016080315412500001
文章仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此做出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明。
网友评论