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

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

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

(转)Win10实现文件名区分大小写

区分大小写的背景
Linux上是可以区分大小写的,比如可以在Linux上创建abc和ABC两个文件;Mac OS上是可以通过配置实现区分文件的大小写的;但在Windows上是不能实现的。

对于经常处理Git事务的童鞋们来说,区分文件的大小写是非常有必要的。

(1)以管理员身份运行cmd.exe

fsutil.exe file SetCaseSensitiveInfo C:\Users\walterlv\GitDemo enable

是的,就是上面这一段非常简单而容易理解的命令即可开启单个文件夹的名称区分大小写功能。只是单个文件夹!如果需要开启其他文件夹,需要多次执行这样的命令。

而如果需要关闭对此文件夹的大小写支持,只需要将 enable 改为 disable

fsutil.exe file SetCaseSensitiveInfo C:\Users\walterlv\GitDemo disable
区分大小写的效果

看!以上就是在 Windows 10 系统级开启了大小写敏感的我的一个 Git 仓库,这下可以让跨平台的 Git 工作起来在各个系统都一样了。

注意事项

以上命令的正确运行需要以下条件,缺一不可:

  1. Windows 10 四月更新(1803)
  2. 安装有 Linux 子系统,即 Windows Subsystem for Linux
  3. 所在分区为 NTFS 格式
  4. 以管理员权限运行 PowerShell

fsutil Read More

Window下允许或禁止拖放

我们可以通过调整拖放的灵敏度来实现, 要更改这一项, 我们需要修改注册表
在如下图的位置

在Windows中启用,禁用拖放

在正常的系统中, DragWidthDragHeight 的值都是4, 我们可以将这个值改到50, 甚至更大, 这将使得如果想要拖放需要拖动更远的距离, 更改这一设定后需要重启电脑… Read More

串口通讯中的55AA

许多串口通讯中测试或握手信号使用AA或55这两个特殊的十六进制数,在许多PIC内部的EEPROM改写也使用这两个数作为敲门砖,初学者可能不解何为,其实如果将这两个数展开成二进制就可明白为什么:
AA展开为10101010, 55展开为01010101,
变成串行电平的话就是一个占空比为50%的方波,这种方波在电路中最容易被分辨是否受干扰或者畸变,在实际波形的观察中也最容易看出毛病所在,以异步串口通讯为例,通讯的每一个字节开始为一个数据位的低电平作为起始位,字节发送结束后是一个或两个数据位的高电平作为停止位,在测试程序阶段,我们可尝试发送0xAA,利用示波器来验证发送是否正确,以9600BPS的波特率计算,每个BIT的所用的时间大约是104.17μS,这里我们选择停止位占一个数据位,然后照此写一个反复连续发送AA的发送程序,那么在正确发送时在IO口看到的波形应该是一个大约4.8KHZ的方波,周期大约为208.34μS,占空比为50%。这样我们可以很快断定发送是否正确。由于这两个数值的特殊性,还被用到其他一些地方,比如PC机引导过程中,bios程序在加载完MBR后,还要对MBR的最后两个字节进行验证,必须为0x55和0xAA。

对于存储的应用:
除了55AA/AA55展开是二进制0、1间隔排列,电路好检测之外,在存储方面,用这两个数组合还有另外的道理:
Flash的存储位,只能从1变成0,所以擦除完后,单元里是1的,此时可以直接写,当写成0后,再要写成1是不行的,一定要擦除,擦除后就变成1了.
每个字节先写成55,再写成AA,这样每个bit都写了一遍又擦了一遍,说明这个字节的位置是好用的

那么AA55/55AA这样的二进制排列来作为数据Pattern,是可以测试每一个位是否可以从1变成0,也能测试是否可以从0变成1的, 如果都可以,就说明存储位没有死 … Read More