美文网首页
三道不同平台的Reverse题目带你入逆向坑

三道不同平台的Reverse题目带你入逆向坑

作者: 蚁景科技 | 来源:发表于2018-09-04 13:27 被阅读105次

本文为原创文章,转载请注明出处!


第一道(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




文章仅用于普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征等,若读者因此做出危害网络安全的行为后果自负,与合天智汇以及原作者无关,特此声明。

相关文章

网友评论

      本文标题:三道不同平台的Reverse题目带你入逆向坑

      本文链接:https://www.haomeiwen.com/subject/tucgwftx.html