|
burp 截获不了APP的消息吗
记得先前有个叫ProxyDroid的软件可以强制把所有应用的请求代理到指定IP的指定端口,配合burp应该可以有你想要的效果. |
|
[求助]提取apk文件中的API!
恩,确实需要会Python语言,不过Python语言很容易上手. 至于提取API的方法,Androguard只是工具,你需要自己手动分析API相关代码的特征,有了这些特征,你再用Androguard工具在APK的代码中遍历寻找这些特征,生成你要的API, Androguard只是帮你省了一个体力活,关键还是靠前面的API特征分析. |
|
[求助]提取apk文件中的API!
Androguard提供的Python API可以让你自定义分析脚本分析APK. http://doc.androguard.re/html/dvm.html 这个是它提供的Python API的文档. https://github.com/egirault/googleplay-api/blob/master/androguard/androproto.py 这是一个使用Androguard Python API写的一个分析GooglePlay代码,提取Proto协议的例子. |
|
IDA如何用结构标识偏移
[QUOTE=baikaishiu;1370323]问题是这样的,有3个结构 SMTCNSta 长度 6 pfsm 长度0x440 SMTCNResult 长度 0x610 现在 [R4,0x448]已经偏移到 SMTCNResult里面去了,我想如何在IDA中把[R4,0x448]改成SMTCNResult.xxx 这样的,[/QUOTE] 就是说R4指向一个结构体,这个结构体有包含三个结构体.长度分别是6,0x440,0x610是吗 如果把这几个结构体导入系统还是不识别0x448这样的访问,那你就把几个结构体的定义合并起来试试,对应原结构体的成员你加个前缀分辨下,勉强可以阅读达到你要的效果 |
|
IDA如何用结构标识偏移
分析JNI的时候遇到相同的问题,是通过IDA的菜单项 File->Load file -> Parse c header file,选择jni.h头文件,加载成功以后,点击主界面的Structures选项卡,按insert键打开 'create structure/union‘对话框,点击add standard structure按钮,在打开的结构体选择对话框中选择添加相应的结构。回到反汇编代码界面,也就是上面你贴的代码界面,在你想要解析的偏移值指令想点击右键,就可以看到结果了。 所以觉得你只要把你的结构体定义头文件导入,按照上面的步骤应该也是可以的 :). ps.上面的jni结构导入步骤可以在《android软件安全和逆向分析》7.6.2节看到. |
|
[求助]android加注册码
网络验证,从服务器获取验证码是什么意思,没明白... 是程序运行前将用户输入的验证码发送到你们服务器进行验证,返回验证结果吗? 我觉得你说的两种,APP都要在程序运行前做一个验证,不同的是服务端验证和本地验证.二者都需要你们公司写相应的程序生成注册码. 至于验证码的验证,那就是你的验证码生成算法的又一次计算了. 感觉从破解难度上二者差不多,只不过服务端模式,破解者不知道你的算法,但是依旧可以模拟数据,绕开验证。 当然服务端更安全一点,起码不会有各种注册机什么出来...,选择哪种就看权衡了. |
|
[求助]哪位大侠帮助看下赋值加密方法
看了下,没能完全解出来,只写自己的一点进展. 这个线程主要是通过Runtime.exec运行了几个命令,获取结果,通过mObserver的handleLog处理. U=XNycveM0Eo3tQuaTxs ==83MzEkRTC03LZTNAPD 这里面包含了执行的命令,static String run(String)方法执行的就是解密的过程. 反编译的代码,修改了下,可以跑起来,但是对于加密字符串,没有正确结果,只解出来第二个字符串是LOGCAT public String run(String p29) { byte[] v8 = new byte[] { -26, -23, -29, -11, -24, -18, -29, -87, -14, -13, -18, -21, -87, -59, -26, -12, -30, -79, -77 }; String v20 = new StringBuilder(String.valueOf(p29.substring((p29 .length() - 2)))).append(p29.substring(2, (p29.length() - 2))) .append(p29.substring(0, 2)).toString(); int v13_0 = 0; while (v13_0 < 19) { v8[v13_0] = ((byte) (v8[v13_0] ^ -121)); v13_0++; } byte[] v5 = Base64.decode(v20, 0); // String v19 = new String(v8); // String v18_1 = new StringBuilder(String.valueOf(v19.substring(2, 3))) // .append(v19.substring(16, 17)).toString(); // String v3_2 = new StringBuilder(String.valueOf(new StringBuilder(String // .valueOf(new StringBuilder(String.valueOf(v18_1)).append("c") // .toString())).append(v19.substring(4, 5)).toString())) // .append(v18_1).toString(); // // try { // Class v11 = Class.forName(v19); // Class[] v4 = new Class[2]; // v4[0] = String.class; // v4[1] = Integer.TYPE; // Method v14 = v11.getDeclaredMethod(v3_2, v4); // Object[] v26_29 = new Object[2]; // v26_29[0] = v20; // v26_29[1] = Integer.valueOf(0); // v5 = ((byte[]) v14.invoke(v11, v26_29)); // } catch (ClassNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (NoSuchMethodException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (SecurityException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IllegalAccessException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IllegalArgumentException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (InvocationTargetException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } int v17_0 = v5.length; int v17_2 = ((v17_0 - 1) - Integer.parseInt(String .valueOf(((char) v5[(v17_0 - 1)])))); char v10 = ((char) v5[(v17_2 - 1)]); StringBuilder v26_40 = new StringBuilder(String.valueOf(String .valueOf(((char) v5[(v17_2 - 2)])))); int v17_3 = (v17_2 - 2); byte[] v6 = new byte[v17_3]; int v13_1 = 0; try { while (v13_1 < v17_3) { v6[v13_1] = ((byte) (v5[v13_1] ^ ((byte) (((byte) Integer.parseInt( v26_40.append(String.valueOf(v10)).toString(), 16)) + 112)))); v13_1++; } } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } String v25 = null; try { v25 = new String(v6, "UTF-8"); } catch (java.io.UnsupportedEncodingException v12_5) { v12_5.printStackTrace(); } return v25; } 注释的部分就是调用了Android的base64解密,我测试的时候替换了下. 解不出来,所以也没有具体看后半部分解密的算法,如果只是想知道解密结果,我觉得用无源调试打个断点就知道了. |
|
[求助]ida6.5 调试apk 配置成功,但连接超时
手机端的android_server服务运行有什么log吗 |
|
[讨论]手机 开机自启动可执行文件的方法
http://k.japko.eu/boot-img-manipulation.html 可以从手机中提取boot.img,然后修改boot.img中Ramdisk.img的*.rc文件,重新打包boot.img,使用fastboot flash boot boot.img 重新写入Boot分区 |
|
[求助]穷举破解
你又不知道它用的是什么加密算法,即使得到秘钥那那还要穷举加密算法 |
|
[求助]求高人反编译下这个函数
这是一个把byte数组转成十六进制字符串的程序 比如byte数组为 34 1 5 64四个值转成十六进制字符串就是22010540 转换的算法也很简单,网上应该都有 就是取数组中的每一个Byte,然后取高四位,转成十六进制字符,再取第四位转成十六进制字符 4位转十六进制字符,0-9映射为assic码的48(0x30)-57(ox39),10-15映射为assic码的97(0x61)-102(0x66) |
|
[求助]已知key 文件,如何反破解
给软件才知道的,单给key文件天知道他是怎么处理的 |
|
[求助]关于逆向动态调试android原生程序的问题
我这两天也刚开始用ida调试so. attach上以后g跳转代码段,可以右键有code选项可以转成汇编代码,F2设置断点,F9继续运行 至于是不是手机或者应用的问题,那就要自己测试了,可以自己写个简单的JNI Demo在你的Note上试试看,能不能正常动态调试。如果不行的话那不就是手机的问题嘛。 ps. 我用的是ida 6.6.141224(32bit) 系统是win7 64位 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值