<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a314131070的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a314131070</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a314131070]]></copyright><item><title><![CDATA[JS反混淆-虚假控制流]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/107545748</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/107545748</guid><author>a314131070</author><pubDate>Thu, 23 Jul 2020 19:54:39 +0800</pubDate><description><![CDATA[0x00 问题描述
在混淆代码中，发现多段如下形式的代码：
11 == cn ? (Ne = pe, ue = Ne, nn = 23907) : 11 &gt; cn ? 5 == cn ? (m = void 0, _ = 0, nn = 8549) : 5 &gt; cn ? 2 == cn ? (N = l, K = N, N = K, Oe = Oe.concat(N), nn = 23105) : 2 &gt; cn ? 0 == cn ? (ae = ue[se], me = ae[ro], ]]></description><category></category></item><item><title><![CDATA[JS反混淆-控制流平展（二）]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/107068299</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/107068299</guid><author>a314131070</author><pubDate>Wed, 01 Jul 2020 19:38:40 +0800</pubDate><description><![CDATA[0x00 问题定义
接第一篇遗留的问题，在做控制流平展反混淆时，用动态执行的方式获取执行路径时，如果原控制流中存在循环的情况，那么获取到的路径就会有重复的现象，如下所示：
[
  [ 3 ], [ 1 ], [ 2 ], [ 1 ],
  [ 2 ], [ 1 ], [ 2 ], [ 1 ],
  [ 2 ], [ 1 ], [ 2 ], [ 1 ],
  [ 2 ], [ 1 ], [ 2 ], [ 1 ],
  [ 2 ], [ 1 ], [ 2 ], [ 1 ],
  [ 2 ], [ 1 ], [ ]]></description><category></category></item><item><title><![CDATA[JS反混淆-控制流平展（一）]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/106567825</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/106567825</guid><author>a314131070</author><pubDate>Fri, 05 Jun 2020 15:30:01 +0800</pubDate><description><![CDATA[0x00 目标
基于AST实现针对使用控制流平展混淆的JS代码的反混淆。
0x01 反混淆方案
为了直观地说明JS的混淆方案，先上JS代码（某大厂真实代码）：
function Qs() {
    for (var s = 1; void 0 !== s; ) {
        var r = 3 &amp; s
          , c = s &gt;&gt; 2
          , b = 3 &amp; c;
        switch (r) {
        case 0:
   ]]></description><category></category></item><item><title><![CDATA[一种定位JNI native方法地址的通用方法]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/105796402</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/105796402</guid><author>a314131070</author><pubDate>Mon, 27 Apr 2020 18:36:20 +0800</pubDate><description><![CDATA[背景
我们在做Android APP逆向分析时，有时需要分析某个Java方法对应的native方法。
分析的第一步当然找到它的位置。
native方法有两种关联方式：

静态（这个很容易，从函数名称（符号）上就能找到）
动态（通过JNI RegisterNatives注册）
动态大多时候也很容易去找，只是会有复杂的情况，

本文描述一种相对通用的方法来快速获取native方法的地址。
方案描述
常...]]></description><category></category></item><item><title><![CDATA[调用DLL未导出函数由参数列表引发的问题]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/82666796</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/82666796</guid><author>a314131070</author><pubDate>Wed, 12 Sep 2018 19:23:39 +0800</pubDate><description><![CDATA[0x00 背景

为了调用一个dll中未导出的函数，首先用IDA分析它的调用约定和参数列表。分析出来的函数声明是这样的：



typedef int (__thiscall* FP_SUB)(void *t, int a2, int a3)

然后用一个for循环去调用这个函数，代码逻辑大致如下：



void call_stub(void* t, int a2, char a3)
{
   ...]]></description><category></category></item><item><title><![CDATA[ADR指令对substate HOOK的影响]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/81775429</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/81775429</guid><author>a314131070</author><pubDate>Fri, 17 Aug 2018 12:04:48 +0800</pubDate><description><![CDATA[0x00 前置信息

在用substrate对某个函数进行HOOK的时候发现会奔溃，并且崩溃在了一个很奇怪的地址上。在排除了参数列表和调用约定的问题之后，本文着手分析产生该奔溃的原因。在分析之前，首先会简要说明Inline HOOK的实现原理，接着借助崩溃信息和动态调试进行分析，最后总结崩溃的一般性原因。

0x01 Inline HOOK 的原理

Inline HOOK是指通过修改函数前N个汇...]]></description><category></category></item><item><title><![CDATA[Xposed 源码剖析（二）]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/81092548</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/81092548</guid><author>a314131070</author><pubDate>Wed, 18 Jul 2018 09:37:46 +0800</pubDate><description><![CDATA[0x00 背景

之前提到当安装Xposed framework后，Xposed framework会替换一个新的app_process至/system/bin/中，app_process 就是Android中的Zygote进程，这期以app_process的实现为主线来详细分析Xposed framework的实现。



0x01 框架分析

首先从main函数开始：



main() {
...]]></description><category></category></item><item><title><![CDATA[Xposed 源码剖析（一）]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/81092526</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/81092526</guid><author>a314131070</author><pubDate>Wed, 18 Jul 2018 09:36:36 +0800</pubDate><description><![CDATA[0x00 简介


是什么： 
&amp;nbsp; Xposed framework是一个基于Android系统实现的能够给用户提供修改系统层面或第三方APP功能的框架服务。
如何工作： 
&amp;nbsp; Android中有一个叫做Zygote的核心进程，它会随Android系统的启动而启动，然后加载系统所需的类，最后再调用初始化方法。每一个APP的进程都是从Zygote进程fork出的子进程，这个进程的...]]></description><category></category></item><item><title><![CDATA[Compile Android 5.1.1 ROM with ROOT by SuperSU]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/60469140</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/60469140</guid><author>a314131070</author><pubDate>Sun, 05 Mar 2017 17:17:27 +0800</pubDate><description><![CDATA[0x00 前置信息Android 5.1.1  
SuperSU v2.65  
目标：基于SuperSU编译一个可以在应用层使用root shell的Android 5.1.1 ROM。0x01 添加su模块
编译Android时，userdebug或者eng方式编译默认自带的su，不使用这个自带的su，即不编译这个自带system\extras\su模块，最简单的方法是把该目录下的Android]]></description><category></category></item><item><title><![CDATA[SUSE 11 中DB2 Express-C 10.1安装配置及删除(完整版)]]></title><link>https://blog.youkuaiyun.com/a314131070/article/details/8020301</link><guid>https://blog.youkuaiyun.com/a314131070/article/details/8020301</guid><author>a314131070</author><pubDate>Wed, 26 Sep 2012 11:45:10 +0800</pubDate><description><![CDATA[由于测试小组需求，需要在SUSE 11上搭建DB2环境，其实这样的资料网上有好多，但是零零散散的，而且在安装过程中也遇到了一些问题，最后总算成功了，今天把完整的安装及配置过程写下来，以后装的时候也会方便许多。
 
1.下载解压安装文件
首先去ibm官网下载DB2 Express-C 10.1，需要注册后才能下载，下载后的文件名是”db2_v101_linuxia32_expc_lite.ta]]></description><category></category></item></channel></rss>