分类目录归档:技术至上

使用pysqlcipher3操作Windows微信数据库


写在前面

之前写过一系列微信数据库的文章,包括找句柄、获取数据库密钥、调用sqlite3_exec查询、备份、解密等。但是一直不知道怎么直接操作加密的库,近来发现腾讯开源了WCDB,几个平台的微信数据库都是以这个作为底层,Windows微信也不例外,遂拉代码,编译,记录下打开数据库后执行的一系列PRAGMA命令,再使用普通的sqlcipher执行相似操作,也可以打开。

编译WCDB

前置操作

1、拉取WCDB
2、在WCDB目录下拉取sqlcipher并检出035036eb02f68c2978ae18693427cd0f786df93e分支
3、在WCDB目录下拉取zstd并检出69036df

Read more

解析某音短视频X-Bogus


写在前面

首先推荐一篇资料:
某音短视频 X-Bogus 逆向分析,JSVMP 纯算法还原
这篇文章介绍了通过插桩日志抠算法的过程,很有参考价值。
文章已经实现的部分,本文不再重复,本文主要介绍从X-Bogus还原19位数组的过程,方便理解算法。

目标

// 从
var x_bogus = 'DFSzswVVUyXANrqJSkdAml9WX7jG';
// 还原出
var x_array = [64, 0.00390625, 1, 28, 7, 22, 69, 63, 0, 186, 99, 164, 90, 214, 32, 0, 190, 144, 201];

正向梳理

Read more

如何注入jar包到目标程序


写在前面

最近在研究Java ui元素嗅探技术,主要目的是识别鼠标指针所在位置的Java元素,本来是通过WindowsAccessBridge中的API实现,但是局限性太多,还有一种思路是通过java awt识别,这种方法自然是要用Java来实现。
虽然我现在不会写具体逻辑,但是可以先记录下怎么将jar包导入到目标JVM,这种技术以后也总会有用的。

具体实现

import com.sun.tools.attach.VirtualMachine;
...
public static void inject(String pid,String jarPath){
    // 根据pid附加目标j

Read more

JavaAccessBridge的使用


写在前面

工作中要通过自动化来操作java桌面程序,Windows的UIA只能识别顶层窗口,无法具体到内部的元素,所以无法使用,经过一番搜索,发现可以通过JavaAccessBridge来访问java中的ui组件。

相关文件

Java在某个版本后内置了JAB,可以在JDK安装目录\\include\\win32\\bridge下找到以下文件:

  1. AccessBridgeCallbacks.h (事件监听)
  2. AccessBridgeCalls.c (API)
  3. AccessBridgeCalls.h (API)
  4. AccessBridgePackages.h (数据结构)

可以在J

Read more

汇编手记之第一个窗口程序


写在前面

我又来写汇编了,最近搞微信逆向搞的头大。
汇编的话,直接从书里抄代码还是轻松愉快,调用的基本是Windows API,也并不晦涩难懂。
而且,看着自己敲的代码在OD里一行一行的执行,瞬间觉得自己理解了编程的本质(雾)。
这样一个窗口程序,编译后只有2.5kb左右,不知道用C++实现编译出来会多大。

汇编代码

.386
.model flat,stdcall
option casemap:none
;-----------------------------------
; Include
;-----------------------------------
include win

Read more

汇编手记之子程序的使用


写在前面

记录结构体、宏定义、解引用指针、子程序以及局部变量的使用。

程序代码

使用masm32编译。
TestProc.asm

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc

includelib user32.lib
includelib kernel32.lib

include msvcrt.inc
includelib msvcrt.lib
;一个宏,可以实现类似cpp中的ifdef _DEBUG
DEBUG equ 0

Read more

汇编手记之HelloWorld


写在前面

上一篇文章写了nmake的使用,本篇来写一下汇编版本的helloworld。

源程序

注:除特别说明以外,本站的汇编代码均使用masm32编译。
helloworld.asm

.386                                                                    ; 允许使用的指令集
.model flat, stdcall                                                    ; 平坦寻址,标准函数调用约定
option casemap:none                 

Read more

汇编手记之nmake的使用


写在前面

最近在读罗云彬的《Windows环境下32位汇编语言程序设计》,书中推荐使用nmake进行编译,nmake和cmake、以及linux自带的make工具,基本都依赖于makefile,在此记录一下namke语法,方便后面查阅。
ps:nmake.exe是VS的附带工具之一,可以使用everything迅速查找。

makefile

#源文件
ASM = helloworld.asm
#生成的obj文件名
OBJS = helloworld.obj
#生成的exe文件名
EXE = helloworld.exe
#链接参数,如果不需要控制台窗口,将console改为windows
LIN

Read more

cv2调用tensorflow模型


问题概述

之前从tensorflow的C/C++接口中成功调用了saved_model,回味过程的时候看到opencv中的dnn,可以直接调用训练好的模型,但是这个不是saved_model,而是h5模型转换得到的另一种pb模型。

转换代码

另外会打印输入输出层的名字,使用tensorflow调用转换好的pb模型时会用到,但cv2的dnn就用不到了。

import tensorflow as tf
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2

def

Read more

使用系统代理时python和go无法获取依赖


写在前面

python的依赖管理工具是pip,需要什么包时在命令行敲pip install xxx即可。go获取依赖可以使用go get xxx,都是比较方便的,但是如果把敲代码的环境换到公司,使用http代理的情况下,会遇到ssl错误,记录下如何方便的获取依赖,不至于次次开热点..

python

因为会报ssl错误,所以折衷的方法是使用http镜像,国内可以使用的是阿里云镜像
http://mirrors.aliyun.com/pypi/simple/
当然,它也有https版本
主要解决方案 在用户文件夹下新建pip目录,在其中新建pip.ini,贴入以下内容:

[global]
inde

Read more