首页
论坛
专栏
课程

[原创]ctf2017第六题设计思路与解题思路

Ericky
6
2017-5-26 17:23 2223

这道题主要需要花时间搞清楚套路,就迎刃而解了。^_^ 

1.java层稍作字符串加密和类名方法名混淆处理(本来是打算java层也做点文章的@_@)



解题:通过阅读代码,可以知道check函数为关键函数,当返回为真的时候,注册成功。


2.so层用花指令对程序指令进行混淆,在一定程度上防止分析。


解题:编写去花指令脚本,F5就会变得很简单。去花脚本在附件里了。去花后check函数F5如下:



这样就能很清楚看到注册过程了,第一个while循环释放存放好的字符串到byte_20020。sub_19DA8为加密函数,返回结果到v14,最后v14与byte_20020做比较,一样就行了。算法采用了RC4加密+base64编码。


3.值得一提的是,so中藏关键字符串数据的方式我自己觉得挺有意思的。不知道聪明的你有没有发现呢?如果不会去花也不要紧,还有一个解题的思路就是是找到最后的汇编cmp,下好断点,因为这个算法的缘故。java层可以遍历传入字符串进行遍历暴力破解。


4.总结一下,我自己想到了两个解题方式,一个暴力解题,一个去花解题。从男人刚正面的角度来讲,这道题主要就是考去花,没有加其他的东西了,直接被大佬们秒得体无完肤。。。先行膜拜。最后附上答案:madebyericky94528

 



[推荐]看雪企服平台,提供APP等级保护加固等安全服务!

上传的附件:
最新回复 (30)
Ericky 6 2017-6-10 18:53
2

0

看别人写的设计思路都挺详细的,我也重新写了个解题的脚本,这里附上。

@kanxue


Ericky 6 2017-6-10 18:54
3

0

附件不显示

上传的附件:
Ericky 6 2017-6-10 18:55
4

0

好了  IDC脚本和IDB  都在里面
追风燕子 1 2017-6-13 14:19
5

0

java层还好,通过调用当前线程的StackTrace信息来反射调用方法去解密字符串,我是直接写java代码反射调用提取的class文件,发现当前线程不同,取的StackTrace信息里的方法也取不到,另so里的花太多了,也不会写脚本
Bet 2017-6-13 17:58
6

0

Ericky 好了 IDC脚本和IDB 都在里面
SO里面的字符串加密实现,一个字符串一个函数。请教这个是如何做到的呢,一般都是用宏实现的一个固定的解密函数。
ccfer 13 2017-6-13 18:13
7

0

我想说这个题有个意外解:madebyericky94528T
就是原解末尾可以多加个T
Ericky 6 2017-6-13 19:48
8

0

追风燕子 java层还好,通过调用当前线程的StackTrace信息来反射调用方法去解密字符串,我是直接写java代码反射调用提取的class文件,发现当前线程不同,取的StackTrace信息里的方法也取不到 ...
脚本在附件里
Ericky 6 2017-6-13 19:48
9

0

Bet SO里面的字符串加密实现,一个字符串一个函数。请教这个是如何做到的呢,一般都是用宏实现的一个固定的解密函数。
没有考到这个字符串解密哦
Ericky 6 2017-6-13 19:49
10

0

ccfer 我想说这个题有个意外解:madebyericky94528T 就是原解末尾可以多加个T
尴尬。。。被发现了。    是的  哭了。。再也不用这个编码了  太坑了
supercolin 1 2017-6-13 21:39
11

0

当我发现so里花太多的时候就放弃了F5,直接动态跟踪读汇编了。
另,还有个重试次数不能超6的检查~
Ericky 6 2017-6-13 21:44
12

0

supercolin 当我发现so里花太多的时候就放弃了F5,直接动态跟踪读汇编了。 另,还有个重试次数不能超6的检查~
恩  是的,这种做法跟我的想法不一样。可能算法太简单啦,以后我要汲取教训。嘿嘿  辛苦
houjingyi 8 2017-6-13 22:16
13

0

楼主,我用了你的脚本还是有跳转没有识别?


Ericky 6 2017-6-13 22:38
14

0




houjingyi

楼主,我用了你的脚本还是有跳转没有识别?

把不能识别的函数要删掉  要不IDA识别不了

Bet 2017-6-14 01:41
15

0

Ericky 没有考到这个字符串解密哦
恩恩,想学习下这块字符串加密的处理.
小熊ppt 2017-6-14 16:38
16

0

楼主,我照着你的idc的脚本运行了,发现ida view和hex文件确实去花了,但是点F5的时候还是没变,这是怎么回事?


这是显示已经去花的view

然后这是F5之后的,和以前一样,没有去花。

Ericky 6 2017-6-14 17:45
17

0

小熊ppt 楼主,我照着你的idc的脚本运行了,发现ida view和hex文件确实去花了,但是点F5的时候还是没变,这是怎么回事?这是显示已经去花的view然后这是F5之后的,和以前一样,没有去花。
把中间被识别成"函数"的块都要删掉  就可以了
小熊ppt 2017-6-14 18:03
18

0

Ericky 把中间被识别成"函数"的块都要删掉 就可以了
是在脚本里改吗,没看到啊,原谅我比较小白T^T
wingsbupt 2017-6-14 18:07
19

0

好的

小熊ppt 2017-6-14 18:13
20

0

wingsbupt 在IDA内怎么删除函数?
edit->function->delete  function
Ericky 6 2017-6-14 20:11
21

0

小熊ppt edit->function->delete function
嗯  对的
wingsbupt 2017-6-15 11:11
22

0

小熊ppt edit->function->delete function
你有修改成功吗?
小熊ppt 2017-6-15 11:23
23

0

wingsbupt 你有修改成功吗?
没,还是没用T^T
小熊ppt 2017-6-15 11:24
24

0

Ericky 把中间被识别成"函数"的块都要删掉 就可以了
能说的再详细点吗
Ericky 6 2017-6-15 11:57
25

0

小熊ppt 能说的再详细点吗
把check函数之间被IDA误识别成函数的"函数"全部delete掉,再F5
小熊ppt 2017-6-15 15:03
26

0

Ericky 把check函数之间被IDA误识别成函数的"函数"全部delete掉,再F5
get了,刚刚走通了,是把check和JNI_onload之间所有的函数都删掉,在左面Funtion  Window中就可以,之前好多代码折叠了,都没注意到,以为自己都删完了,其实还有好多没有删掉:-)
leidianl 2017-6-15 16:44
27

0




小熊ppt

[em_69]get了,刚刚走通了,是把check和JNI_onload之间所有的函数都删掉,在左面Funtion Window中就可以,之前好多代码折叠了,都没注意到,以为自己都删完了,其实还有好多 ...

00

小熊ppt 2017-6-16 13:48
28

0

楼主,问一下,可以把你的去花脚本转载到博客中吗,会注明出处的:-)
Ericky 6 2017-6-16 14:03
29

0

小熊ppt 楼主,问一下,可以把你的去花脚本转载到博客中吗,会注明出处的:-)
可以~
houjingyi 8 2017-6-19 10:08
30

0

还想请教一下楼主花指令是怎么加到so文件里面去的,用什么工具还是需要自己写程序呢
Ericky 6 2017-6-19 12:18
31

0

houjingyi 还想请教一下楼主花指令是怎么加到so文件里面去的,用什么工具还是需要自己写程序呢
自己写的程序哦
返回