未知的世界

不能停息的脚步

Wine 上的IDA安装keypatch plugin

Published on: 10 July 2017
keypatch Keypatch是基于keystone-engine在IDA上的汇编插件,可以直接用汇编字符串修改原来的指令。 在wine上安装 安装keystone python module 从Download下载最新的binary,这里都下32位的binary. 直接运行安装文件就行,勾选python2.7的版本 安装keypatch cd ${WINE_HOME}/drive_c/Program Files (x86)/IDA 6.8/plugins wget "https://raw.githubusercontent.com/keystone-engine/keypatch/master/keypatch.py" 使用 快捷键Crtl+ALT+K 然后在Assembly上填入相应的指令既可以修改。

查看Android设备上的Permission

Published on: 7 July 2017
[TOC] 免责说明 为临时整理的文档,用来快速查阅的。 Android permission level normal:低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加标签),安装时不需要用户确认; dangerous:高风险权限,安装时需要用户的确认才可使用; signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它; signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。 上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序(或部分应用)进行访问控制,则可以通过在AndroidManifest.xml中添加标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。 # 查看权限 adb可以获取到设备上存在的permission信息,一种是通过pm, 另外一种是dumpsys package的方式。 pm获取的信息比较干净,基本就是permission的本身以及和组的联系。 dumpsys package方式获取的就更加的详细,是package与permission相关的信息,更有实用的价值。 pm 命令获取和permission有关的信息 pm list permission-groups: prints all known permission groups. pm list permissions: prints all known permissions, optionally only those in GROUP. Options: -g: organize by group. -f: print all information. -s: short summary. -d: only list dangerous permissions. -u: list only the permissions users will see. 查看设备上存在的权限组 weiwei@WPS:~$ adb shell pm list permission-groups permission group:android. ... Read More

体验tensorflow

Published on: 25 May 2017
安装 tensorflow提供多种环境的安装方式,具体查看install 我使用的是Ubunt 17.04的环境,因为笔记本是带有NVIDIA的独立显卡的,一直用Ubuntu,独显都是关闭的,这回玩机器学习就可以派上用场了,虽然不是高端显卡,但是总比笔记本的CPU跑的快吧。所以这里接下来安装带显卡的版本。 在tensorflow的下载最新(2017/5/24)的whl wget "https://ci.tensorflow.org/view/Nightly/job/nightly-python35-linux-cpu/lastSuccessfulBuild/artifact/pip_test/whl/tensorflow-1.2.0rc0-cp35-cp35m-linux_x86_64.whl" sudo pip3 install tensorflow_gpu-1.2.0rc0-cp35-cp35m-linux_x86_64.whl 安装nvidia-cuda-toolkit sudo apt-get install nvidia-cuda-toolkit 安装libcudnn 这个需要去nvidia官网注册账户下载 我选的是5.1的版本libcudnn5_5.1.10-1+cuda8.0_amd64.deb wget "http://developer2.download.nvidia.com/compute/machine-learning/cudnn/secure/v5.1/prod_20161129/8.0/libcudnn5_5.1.10-1%2Bcuda8.0_amd64.deb?9jGUrECT4vEIctTCghrrlFVawG6MmMwk8vZcMnlZn52_R1pZlETOEcNIdCo6xXy-U5_MlDM1JBmEislL3dG4geAgS4MRrl4Eiw3dUuFaUYMFlohz-21ETOgadcCgAjWuvKyjgi0gS3rw4gp2cjRXsech39MAzttF8sJ8MQsv7dHRpnJlmPJrN66BYEdXCwVgr_x7FaGKoI_aYGQ-22bBRA7E" sudo apt-get install libcudnn5_5.1.10-1+cuda8.0_amd64.deb Hello World 根据官网的列子,这里测试一下 weiwei@Lifar:~/opt/tensorflow$ cat hello_tensorflow.py #!/usr/bin/env python3 import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello)) weiwei@Lifar:~/opt/tensorflow$ ./hello_tensorflow.py 2017-05-25 01:10:43.850869: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. ... Read More

CVE-2016-10229分析

Published on: 5 May 2017
漏洞描述 Linux kernel是美国Linux基金会发布的操作系统Linux所使用的内核。Linux kernel 4.5之前的版本中的udp.c文件存在安全漏洞,Linux内核中的udp.c允许远程攻击者通过UDP流量执行任意代码,这些流量会在执行具有MSG_PEEK标志的recv系统调用时触发不安全的第二次校验和计算,远程攻击者可精心构造数据执行任意代码,进一步导致本地提权,属于高危漏洞。但由于现实情况中,基于UDP协议的服务时MSG_PEEK标志在实际使用的情况较少,受该远程命令执行漏洞危害影响群体范围有限。 该漏洞是来自谷歌的Eric Dumazet发现的,他说漏洞源于2015年年末的一个Linux内核补丁。 代码分析 *__skb_recv_datagram里判断peek,会使得skb->users加1. https://android.googlesource.com/kernel/msm/+/android-7.1.2_r0.7/net/core/datagram.c 194 *peeked = skb->peeked; 195 if (flags & MSG_PEEK) { 196 if (_off >= skb->len && (skb->len || _off || 197 skb->peeked)) { 198 _off -= skb->len; 199 continue; 200 } 201 skb->peeked = 1; 202 atomic_inc(&skb->users); skb_shared(skb)为假,skb被多个对象引用,不会将csum结果存到skb上,所以后面的代码会再次计算。 https://android.googlesource.com/kernel/msm/+/android-7.1.2_r0.7/net/core/datagram.c __sum16 __skb_checksum_complete(struct sk_buff *skb) { __wsum csum; __sum16 sum; csum = skb_checksum(skb, 0, skb->len, 0); /* skb->csum holds pseudo checksum */ sum = csum_fold(csum_add(skb->csum, csum)); if (likely(! ... Read More

Android内核调试

Published on: 4 May 2017
在分析Linux的内核CVE,或者是编写相关的POC,有时候可能结果与预期不太符合,这个时候就需要查看内核的运行过程。 KGDB kgdb提供了一种使用 gdb调试 Linux 内核的机制。使用KGDB可以象调试普通的应用程序那样,在内核中进行设置断点、检查变量值、单步跟踪程序运行等操作。 编译内核 首先是去https://source.android.com/source/building-kernels下载对应的内核源代码。 msm对应大部分的nexus以及pixel手机 git clone https://android.googlesource.com/kernel/msm.git 下面以nexus5x(bullhead)为例子,生成一个.config $ export ARCH=arm64 $ export CROSS_COMPILE=aarch64-linux-android- $ cd msm $ git checkout android-msm-bullhead-3.10-nougat $ make bullhead_defconfig 然后配置.config $ make menuconfig 主要开启 [*] Kernel hacking [*] Compile the kernel with debug info [*] KGDB: kernel debugging with remote gdb —> [*] Enable dynamic printk() call support 编译得到的arch/arm64/boot/Image GDB调试 模拟器启动 emulator -verbose -show-kernel -netfast -avd -avd Pixel_API_25 -kernel arch/arm64/boot/Image -qemu -gdb tcp::1234,ipv4 -S ... Read More