<commit_before>---
layout: post
title:  MSC-2015移动安全挑战赛 第二题
category: android
tags: reverse
keywords: 
description: 
---

此题apk和so都没有加壳，但是so里面的一个关键函数`jolin`是加密的，在so加载时解密。并且so加入了反调试技术。
由于我学习安卓的so调试是从比赛前3天开始的，也就会一个最最基本的。无法对抗反调试，一度想放弃这题。不过后来发现，这个反调试要到`JNI_Onload`函数退出后才触发。所以在`JNI_Onload`入口处下断点，添加watch，在`4450`这个地址（就是`wojiushidaan`这个字符串保存的地方）。F8一直走，看到这个地址的内容变化，就是答案了。

![图](/public/img/2015-01-29-msc-2015_android_No2-1.jpg)

`securityCheck`函数有价值的就是while循环，很明显就是用户输入的字符串和`628c`这个间接应用地址上的字符串比较。（实际地址在`4450`）

![图](/public/img/2015-01-29-msc-2015_android_No2-2.jpg)

关键函数，如果F7进去，可以发现`jolin`解密后的代码，这个函数用来解密出`4450`处的答案。

![图](/public/img/2015-01-29-msc-2015_android_No2-3.jpg)

hex view窗口可以看到4450地址内容的变化。

这题高手们有patch securityCheck函数的，利用`__android_log_print`输出4450的内容。（这个是我需要继续学习的——patch so）
还有是允许后dump出so，4450的地方就是答案了。

能做出这个题目纯属运气，因为反调试设置的要等到`Onload`退出才触发异常，而so的解码已经在`Onload`里面完成了。只需要正确分析出`securityCheck`函数用于比较的字符串存放的地方。根本需要去关心解密函数是如何被解密出来的。

期待哪位大牛能详细指点一下android的so里面所用到的反调试技术。<commit_msg>android<commit_after>---
layout: post
title:  MSC-2015移动安全挑战赛 第二题
category: android
tags: reverse
keywords: 
description: 
---

此题apk和so都没有加壳，但是so里面的一个关键函数`jolin`是加密的，在so加载时解密。并且so加入了反调试技术。
由于我学习安卓的so调试是从比赛前3天开始的，也就会一个最最基本的。无法对抗反调试，一度想放弃这题。不过后来发现，这个反调试要到`JNI_Onload`函数退出后才触发。所以在`JNI_Onload`入口处下断点，添加watch，在`4450`这个地址（就是`wojiushidaan`这个字符串保存的地方）。F8一直走，看到这个地址的内容变化，就是答案了。

![图](/public/img/2015-01-29-msc-2015_android_No2-1.jpg)

`securityCheck`函数有价值的就是while循环，很明显就是用户输入的字符串和`628c`这个间接引用地址上的字符串比较。（实际地址在`4450`）

![图](/public/img/2015-01-29-msc-2015_android_No2-2.jpg)

关键函数，如果F7进去，可以发现`jolin`解密后的代码，这个函数用来解密出`4450`处的答案。

![图](/public/img/2015-01-29-msc-2015_android_No2-3.jpg)

hex view窗口可以看到4450地址内容的变化。

这题高手们有patch securityCheck函数的，利用`__android_log_print`输出4450的内容。（这个是我需要继续学习的——patch so）
还有是允许后dump出so，4450的地方就是答案了。

能做出这个题目纯属运气，因为反调试设置的要等到`Onload`退出才触发异常，而so的解码已经在`Onload`里面完成了。只需要正确分析出`securityCheck`函数用于比较的字符串存放的地方。根本需要去关心解密函数是如何被解密出来的。

期待哪位大牛能详细指点一下android的so里面所用到的反调试技术。
{'fraction_non_alphanumeric': 0.12945973496432212, 'fraction_numerical': 0.07747196738022426, 'mean_word_length': 12.174496644295303, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2883910', 'n_tokens_mistral': 1473, 'n_tokens_neox': 1584, 'n_words': 53}