application data拒绝访问的解决方法

将以下内容保存成Reg文件导入注册表, 右键菜单获取管理员权限即可解决

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\runas]
@="管理员取得所有权"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"

[HKEY_CLASSES_ROOT\exefile\shell\runas2]
@="管理员取得所有权"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\exefile\shell\runas2\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" 
Read More

JEB 显示反编译字符串的16进制编码

像上图中这种包含不可见字符的, 我们可以用下面的脚本来显示他的16进制编码, 结果是Unicode编码, 如果是单字节的, 要移除多余的0

from com.pnfsoftware.jeb.client.api import IScript
from com.pnfsoftware.jeb.core.events import JebEvent, J
from com.pnfsoftware.jeb.core.units.code import ICodeUnit, ICodeItem
from com.pnfsoftware.jeb.core.units.code.android import IDexUnit
from com.pnfsoftware.jeb.core.units.code.android.dex import IDexString
from com.pnfsoftware.jeb.core.output import ItemClassIdentifiers
import binascii

"""
Sample client script for PNF Software' JEB.
Demo of the DEX manipulation methods exposed in the 
Read More

IDA Scripts

#自动查找函数头并尽可能的识别为函数
def make_function(opcodes, align=1):
    start_ea = ida_ida.inf_get_min_ea()
    while (start_ea = 0):
        procea = idc.find_binary(start_ea, SEARCH_DOWN, opcodes)
        if (procea == idaapi.BADADDR):
            break

        start_ea = procea + 1
        if (procea % 2) == align:
            flags = ida_bytes.get_flags(procea-align)
            if ida_bytes.is_unknown(flags):
                ida_auto.auto_make_proc(procea-align)
                msg("%s: %X\n" % (opcodes, procea-align))

            func = ida_funcs.get_func(procea)
            if func != None:
                
Read More

VS2017 Openssl编译

按要求安装好
ActivePerl, (https://www.activestate.com/ActivePerl)
nasm(可以不装, 要使用参数 no-asm)

命令行下进入Openssl目录执行以下命令

perl configure VC-WIN32 enable-md2 enable-rc5 --prefix="d:\openssl_bin"
perl configure VC-WIN64A enable-md2 enable-rc5 --prefix="d:\openssl_bin"

nmake
nmake test  (执行一些测试代码)
nmake install  将编译好的文件拷贝到 d:\openssl_bin 

如果提示
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module)
用以下命令安装模块
ppm install Win32::Console
默认的下载在新的ActivePerl中可能没有PPM可以用以下方法建立一个新的ActivePerl Build, 同时也可以添加 … Read More

IL 指令Opcode速查表

Opcode名称说明参数弹出(Pop)压入(Push)
00nop如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。   
01break向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。   
02ldarg.0将索引为 0 的参数加载到计算堆栈上。  *
03ldarg.1将索引为 1 的参数加载到计算堆栈上。  *
04ldarg.2将索引为 2 的参数加载到计算堆栈上。  *
05ldarg.3将索引为 3 的参数加载到计算堆栈上。  *
06ldloc.0将索引 0 处的局部变量加载到计算堆栈上。  *
07ldloc.1将索引 1 处的局部变量加载到计算堆栈上。  *
08ldloc.2将索引 2 处的局部变量加载到计算堆栈上。  *
09ldloc.3将索引 3 处的局部变量加载到计算堆栈上。  *
0Astloc.0从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。 * 
0Bstloc.1
Read More

BTrace 使用备忘

BTrace植入过的代码,会一直在,直到应用重启为止。所以即使Btrace退出了,业务函数每次执行时都会执行Btrace植入的代码

在Btrace脚本中只能使用 BTraceUtils 中的函数, 这在有些情况下很不方便
我们需要开启Btrace的unsafe模式
以最新的2.0版本为例, 开启方法如下
首先在命令行中 增加 -u参数指明开启 unsafe模式

btrace -u -o d:\log.txt PID d:\script.java

另外在脚本中也要增加 @BTrace(unsafe=true)

import org.openjdk.btrace.core.types.AnyType;
import org.openjdk.btrace.core.annotations.*;

import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.openjdk.btrace.core.BTraceUtils.*;

@BTrace(unsafe=true)
public class script {

	@OnMethod(
		clazz = "datalayer.CoreD", 
		method = "execute", 
		location 
Read More

C++逆向【参数传递】

MSVC x64编译的程序, 函数参数前四个整数参数将传入寄存器,整数值在 RCX、RDX、R8 和 R9 中传递 (按顺序从左到右)。参数五和更高在堆栈上传递。所有参数是将右侧对齐在注册。因此,被调用方可以根据需要忽略寄存器中上面的位,并且只访问所需的寄存器部分。

    函数参数前四个浮点型和双精度参数传入 XMM0、XMM1、XMM2、XMM3(最大可达 4 个)中,参数五和更高在堆栈上传递,并忽略常用于该基槽的整型槽(RCX、RDX、R8 和 R9)(请参见示例),反之亦然。下面分三类情况进行分析

参数传递示例 1 – 全部都是整型参数

func1(int a, int b, int c, int d, int e);  
// a in RCX, b in RDX, c in R8, d in R9, e pushed on stack

参数传递示例 2 – 全部都是浮点型参数

func2(float 
Read More

WireShark 自定义协议解析脚本

--[[
使用方法:
将脚本放在Wireshark根目录, 并修改根目录下的init.lua
在文件尾增加
dofile(DATA_DIR.."myProto.lua")
--]]
    
do
    --[[
    创建一个自定义协议myProtocol
    第一个参数是协议名称会体现在过滤器中
    第二个参数是协议的描述信息,无关紧要
    --]]
    local myProtocol = Proto("LocaPacket", "桢数据包")
    
    --协议端口号
    local hb_port = 9930

    --将字段添加到协议中
    local proto_foo = myProtocol.fields

    --协议字段, 顺序不重要, 只是定义各个字段的显示方式
    proto_foo.magic = ProtoField.bytes("Magic", "Magic", base.SPACE)
    proto_foo.magic2 = ProtoField.string("Magic2", "Magic2")
    proto_foo.data_len = ProtoField.uint16("DATA_LEN", "DataLen", base.HEX)
    proto_foo.BaseStationId = ProtoField.uint64("BaseStationId", "BaseStationId", base.HEX)
    
Read More

WinCrypt & CryptImportKey KeyBlob分析

逆向一个程序用到了 CryptImportKey CryptEncrypt 进行加密
导入的Key数据为

BYTE key[] = {
        0x08,
        0x02,
        0x00,0x00,
        0x01,0x66,0x00,0x00,
        0x08,0x00,0x00,0x00,
        0x23,0xE2,0x55,0x17,0x92,0x68,0x53,0x32
    };
//上面的数据实际上对应的结构为
struct keyBlob
{
	BLOBHEADER hdr;
	DWORD keySize;
	BYTE bytes[8];
} blob;
typedef struct _PUBLICKEYSTRUC {
        BYTE    bType;
        BYTE    bVersion;
        WORD    reserved;
        ALG_ID  aiKeyAlg;
} BLOBHEADER, PUBLICKEYSTRUC;

根据以上结构, 从 wincrypt.h 头文件中可查得头定义实际为

BYTE key[] = 
Read More

开启IDEA 文件名区分大小写

在菜单 Help | Edit Custom Properties 中
添加下面的行

idea.case.sensitive.fs=true

这将告诉IDEA区分文件名的大小写, 在做出上面的改变后, 在
选择菜单 File | Invalidate Caches 然后重启IDEA

Read More