题目:androideasy

最近刚学了点逆向技能,找一些简单的ctf 题目来验证一下效果

下载地址:androideasy

解题思路

首先拿到的是个zip文件,打开是个普通的apk目录

也不知道做逆向的和做安全的看到他的感觉是否一样,

修改后缀为apk 后扔到jadx中,然后在往模拟器中扔一份

模拟器中可以看到 很简单的功能,输入字符 。点击check 判断是否输入正确

之后查看jadx

大概确定一下,就是需要输入一个字符串在check判断通过即可

定位到check,输入的字符串必须让if判断为真,也就是进入到check的true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private byte[] f21s = {113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106};

public boolean check() {
byte[] chars = this.editText.getText().toString().getBytes();
if (chars.length != this.f21s.length) {
return false;
}
int i = 0;
while (i < this.f21s.length && i < chars.length) {
if (this.f21s[i] != (chars[i] ^ 23)) {
return false;
}
i++;
}
return true;
}

接下来写firda 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function flag() {
Java.perform(function () {
var flag1 = Java.use("com.a.sample.androidtest.MainActivity");
flag1.check.implementation = function () {
var retval = this.check();
console.log(retval)
return true;
}
})
}


function main() {
flag()
}

setImmediate(main);

这样就可以保证返回为真了

回到正题,前台返回为真对flag没有帮助,

所以还是得得到f21s ,写个脚本 获得下面的字符串

private byte[] f21s = {113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106};

最后的脚本

1
2
3
4
5
6
7
8
9
10
f21s = [113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106]
print(len(f21s))
flag = ""

for i in range(0,len(f21s)): # 判断每一位,一共判断f21s 长度次
for j in range(0,127):
if (f21s[i] == (j ^ 23)):
flag += chr(j)

print(flag)py
1
2
31
flag{It_1S_@N_3asY_@nDr0)I)1|d}
相关文章
评论
分享
  • scrapy 框架学习

    入坑scrapy在自己学习了一段时间爬虫之后(其实也就是了解了下爬虫),我就迫不及待的想学习心得东西了。 今天就入手scrapy框架 官方文档 安装安装上基本没啥大问题,缺啥补啥就行 这里我选择使用Python虚拟环境virtuale...

    scrapy 框架学习
  • 某app加密算法分析

    Hey, password is required here. a7fbab8565cf6bbb84f5578e356b215e1a835de7a145bd926381e35cc45256f4...

    某app加密算法分析
  • jni函数hook

    jni函数hook(计算 地址方式)12345678910111213141516171819202122232425262728293031323334353637function hookTest9() { Jav...

    jni函数hook
  • Hook jni 主动调用

    Hook jni 主动调用要对hellofromc 进行主动调用,修改返回值,但是这里不能直接通过replace去修改返回值,而是要通过newstringutf 去修改返回值。 1234567891011121314151617181...

    Hook jni 主动调用
  • Hook 计算非导出函数地址

    hook 读写内存数据对string字符串,可能是加密的,可以通过直接hook 加载的内存数据来读取解密状态的字符串 123456789读取内存字符串数据function hookTest7() { var soAdd...

    Hook 计算非导出函数地址
  • Hook 获取指针参数的返回值

    Hook 获取指针参数的返回值在c语言中,一般都会以指针传递返回的值 ,没有return 或者return为true hook sub_750 打印参数和输出 12345678910111213141516171819functio...

    Hook 获取指针参数的返回值
  • Hook dlopen

    hook dlopen在刚开始hook 我们必须使得app加载so 才能hook, 我们可以hookdlopen 获取到so在那加载,在高版本中有一些so会走android_dlopen_ext 1234567891011121314...

    Hook dlopen
  • Hook 导出函数和修改函数参数返回值

    Hook 导出函数123456789101112131415161718192021222324252627282930// hook 导出函数function hookTest1() { var addAddr =...

    Hook 导出函数和修改函数参数返回值
  • Hook so 导入导出表

    hook so 导入导出表启动frida打开两个cmd 窗口 12345第一个cmd窗口adb shellsucd /data/local/tmp./fx // 这个是frida-server-12.8.14-android-x86...

    Hook so 导入导出表
  • Hook Java层通杀

    Hook 通杀Hook 普通方法和修改函数参数返回值fradaserver 是手机端的, android低版本 frida 尽量低版本 fridaserver版本要与frida库版本一致 不同平台用不同fridaserver 不要和...

    Hook Java层通杀
Please check the comment setting in config.yml of hexo-theme-Annie!