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