自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 【node源码-5】Async Hooks使用

init 的特殊性同步调用:在创建异步资源时立即执行可能递归:如果你在 init 中创建新的异步操作,会再次触发 init性能影响:每个异步操作都会触发,高频场景下开销大before/after 的配对总是成对出现(即使回调抛异常)可以用来实现上下文传递(CLS - Continuation Local Storage)用来测量异步回调的执行时间destroy 的不确定性可能延迟调用(依赖 GC)某些类型可能不会触发 destroy不能依赖 destroy 做关键的清理工作。

2025-12-23 21:13:23 543

原创 【node阅读-3】Execution__Call分析

直接关系:这是V8 函数调用的统一入口(对象访问(Interceptor 触发点)。函数调用JSEntrystub → 栈帧 → 执行。:Proxy 或自定义 getter/setter 在Invoke内部触发。Dispatcher:Fast API(C++ 绑定)或 IC(JS 缓存)都在Invoke分支处理。这段代码就是 V8 处理对象访问(this/Interceptor)和函数调用(Dispatcher/JSEntry)的核心实现,Node.js 的fn->Call最终走的就是它。

2025-12-23 20:25:23 686

原创 【node源码-2】Node.js 启动流程

↓↓LoadEnvironment() → StartExecution() → 选择入口 JS↓↓↓你的 app.js 执行 → 进入事件循环(uv_run()) → 直到进程结束你的 app.js 顶层代码执行(同步部分)↓异步任务注册(setTimeout、fs.readFile 等) → 进入 libuv 事件循环↓事件循环运行(uv_run()) → 处理所有异步回调、微任务↓事件循环清空 → 返回退出码↓NodeMainInstance::Run() 返回↓。

2025-12-23 20:06:41 562

原创 【node阅读-1】node架构了解

上篇还是唐突了,上来直接打田英,被秒的毫无还手之力。于是先搜了一下整体攻略。

2025-12-18 20:27:05 810

原创 【node阅读-0】下载编译node

是 C++ 标准库(头文件)提供的智能指针之一,用于自动管理动态分配对象的生命周期,支持多个指针共享同一个对象的所有权。共享所有权:多个shared_ptr可以指向同一个对象,当所有shared_ptr都销毁或重新指向其他对象时,才会自动删除底层对象。引用计数:内部使用一个引用计数器(reference count)记录有多少个shared_ptr共享这个对象。拷贝/赋值时:计数 +1析构或 reset 时:计数 -1计数降为 0 时:自动delete管理的对象。

2025-12-17 23:32:39 795

原创 【补环境框架】序

最近在研究补环境框架的实现,发现了一些有意思的东西。现有的框架虽然能用,但代码量大得离谱。本文会深入分析现有方案的工作原理和致命缺陷,最后提出一个基于V8魔改的优化思路。

2025-12-15 23:51:21 940

原创 【爬虫框架-8】其他

batch_size。

2025-12-15 22:09:35 1200

原创 【爬虫框架-7】日志追踪实现

在分布式爬虫系统中,一个初始请求可能会派生出数十子请求(列表页→详情页→评论页→下一页…),这些请求分布在不同的消费者进程中执行。如何追踪整个任务链的执行状态、性能瓶颈以及调用关系,成为系统可观测性的核心挑战。

2025-12-15 22:08:36 611 1

原创 【爬虫框架-6】中间件的另一种写法实现

中间件(Middleware)是爬虫框架中的拦截器模式实现,它允许你在请求发送前和响应返回后插入自定义逻辑。

2025-12-10 13:21:30 567

原创 【爬虫框架-5】实现一下之前的思路

其实之前写的redis 统计,虽然是看起来有用,但是后来有评论给了新的思路,就是发布的时候 直接新定义新的队列。即同一份代码,发布的时候 预定义新的队列比如 批次号1201009_task1 ,1201010_task1 ,然后只要确定能自己自动消费即可。这是任务 发布的demo ,通过判断单个任务的is_success,收集到当前这个队列中发布任务的情况。当然,既然是类静态方法, 传入的类参数 是要有个重新实例化的地方:_get_or_create_spider_instance。

2025-12-10 13:18:12 191

原创 【爬虫框架-4】统计的用法

当然,这个做法在当前看来也不是最优解,也希望能有幸和读到的人一起探讨。# 在这里可以打点:任务执行成功后续还需要根据监控的四大黄金指标不断完善。更多文章,敬请关注gzh:零基础爬虫第一天next~

2025-12-07 07:58:53 1296 3

原创 【爬虫框架-3】闭包的用法

这也是我的第一版做法,把类相关的信息传过去,消费的时候冲洗构造实例。同时还要维护一个实例缓存,避免每次都重新从meta参数转实例。如果你需要记录一些状态(比如计数),通常会写一个类。但如果逻辑很简单,用类有点“杀鸡用牛刀”,闭包是更好的选择。有时候我们定义了逻辑,但不想立刻执行,而是想把逻辑和参数打包好,等需要的时候再执行。4.闭包的终极形态:装饰器(Decorator)装饰器就是:接受一个函数,返回一个闭包。外部变量是没问题的(如例1),但如果要。外部变量(如例2的计数器),必须使用。

2025-12-07 07:56:16 312

原创 【爬虫框架-2】funspider架构

如果能看到这里,说明这个流程基本已经了解了。其实就是一个同步的,先publish任务扔进队列,然后启动消费,采集+ 解析+入库。当然,任意一个部分出错+重试,都有funboost 兜底来重试,这个框架简直是绝了。爬虫有相当多的参数功能就可以直接用funboost。就是这里动态创建队列的时候,官方文档给了demo ,动态生成队列 ,以及使用类方法。但是动态生成队列 +使用类方法 就有点麻烦了。根据解析名创建队列。在上述代码中,有一个。这个我们回头再解决~

2025-12-05 21:45:30 694

原创 爬虫框架-1】如何使用 Funboost 解决之前的问题

有,funboost.

2025-12-04 21:15:07 1219

原创 【爬虫框架-0】从一个真实需求说起

当我第一次接到这个需求时,觉得很简单:每天早上 08:00 自动采集10000条商品数据,采集完成后立即验证数据完整性,然后生成报表推送到业务系统。用 Scrapy 写个爬虫,加个定时任务,不就搞定了?08:00 - 触发采集任务08:??- 采集什么时候结束?08:??- 数据验证要等到什么时候才能开始?这个看似简单的"等待采集完成"的需求,让我重新审视了爬虫框架的设计。初始队列:10000 个 URL↓第一轮采集:9800 成功,200 失败 → 200个自动重试↓。

2025-12-04 20:00:00 1351 1

原创 安卓篇-root检测

同样检查文件 是否存在 ,

2025-11-20 01:13:03 38

原创 左右互搏03-so调用java md5-android开发

viewmodel加个 triggerEncryption 方法。fragment 加一个点击处理逻辑。在home xml 中加一个按钮。通过jni 生成这个java。

2025-01-26 07:18:41 95

原创 左右互博02-unidbg主动调用外层so函数

另一个是 module.findSymbolByName(“md5Enc”);// findSymbolByName 里面 尽量填ida里面的方法,这个动态注册的demo ,另一个是 动态注册的 要 dm.callJNI_OnLoad(emulator);这里有几个点 ,一个是要加载android.so unidbg 已经实现了。unidbg 代码。

2025-01-25 21:44:42 201

原创 左右互博02-unidbg主动调用so函数

这篇来说一下unidbg 怎么调用。

2025-01-25 20:40:52 177

原创 左右互博02-frida主动调用so函数

对于这样的函数怎么去主动调用呢。和手机上的 c层加密一样。

2025-01-25 20:39:35 304

原创 左右互搏01-so 防直接hook之 左篇

稍微修改一下,另一个so 调用这个so,加密的时候,打开so 调用函数再关掉, 这样就没有一个好的调用时机了(主动构造除外)。如果java层直接调用, 那么frida 直接hook这个导出的函数就可以了 ,封装了一个统一出口函数 ,在另一个cpp中调用。当然也可以hook ,见下篇。这是一个魔改的md5。

2025-01-25 18:17:38 122

原创 左右互博01 - so 防直接hook 之 右篇

通过hook dlopen 可以知道so被调用。新系列- so 防直接hook - 逆向篇。

2025-01-25 17:36:36 85

原创 安卓篇-unidbg初步测试

jni不知道自己可能会用到哪些java函数,但是这个abstractJni已经实现了一些基本函数如 stringClass.getBytes 如果有新的 就需要我们自己补一些。:目前app的进度是c层的md5魔改 已经做好,又套了一层java层的加密。刚好可以再熟悉一下unidbg。下一篇加个registernative的函数 和oncreate的函数在app 中。先看下app 的反编译的结果,很明显,源码很清晰 ,之前的混淆方式一点用没有。最新版的app ,作为demo测试一下。unidbg代码如下。

2024-07-20 21:23:34 350

原创 基础篇-appdemo升级

接之前gitee,想做个许多按钮的app,包括各种加密,检测等。突然想到可以做一个类似yrx的web题目列表样式的app,开始试一下。

2024-07-11 03:14:20 127

原创 sha1以及hmac 算法细节

先变hex 再补80 00 到512 bit ,这就是k·ipad之后的数据 和 明文的Hex形式 进行级联。opad之后的数据 与hash结果 进行级联。吧前面的k`和0x5c进行抑或 ,先把明文hex 比如koohai。级联后的数据 进行一次hash。级联后的数据 进行一次hash。比如key是 a123456。和0x36抑或 xor。和之前的hash 进行拼接。然后和上面的值进行拼接。扩展到分组长度的key。

2024-06-27 21:35:21 219

原创 md5在ida中的识别

ida中 识别md5 ,先右键转为hex 或者按h在ida中当然也可以使用搜索search imdate-value 搜索立即数 0x67452301;这是上面的init中的state一个数···

2024-06-23 08:34:14 205

原创 md5在ida中的识别

ida中 识别md5 ,先右键转为hex 或者按h在ida中当然也可以使用搜索search imdate-value 搜索立即数 0x67452301;这是上面的init中的state一个数···

2024-06-23 08:32:45 802

原创 某md5魔改-js还原

md5魔改算法还原

2024-06-22 03:00:25 247

原创 嵌入md5

一些set和get 是对基本变量的绑定 ,有用的只有这个 onMd5Click。cmakelists.txt : 把两个cpp 都导入。接下来进入正题,要在安卓中导入cpp,fragment中调用。

2024-06-19 01:40:05 112

原创 鸽鸽鸽 ~

同时也有一个基于react的前端xpath 可配置界面, 基于scrapy crawlspider的通用爬虫想法正在实现,基本功能如下。在gitee上放了个仓库,正向写个app的demo,方便逆向及hook。鸽了好久不想写东西。有初步demo 了就挂链接。

2024-05-28 01:29:52 276

原创 yrx第一题补环境

先在浏览器中试一下,发现浏览器正常输出,由于预先知道了是md5的魔改和aes 的魔改。魔改算法暂时水平还不够,只能先补补环境。先运行一下,发现报错,抛出异常了,我们把正常js 放浏览器看一下。今天来挑战一下入门级别的 猿人学第二届第一题(作者说简单到离谱) 我信个g~老头子坏得很。如图,代码是直接发送的请求,token是在发送的时候生成的。通过调试发现,如果浏览器的话, 就直接返回 0xbb76994f。稍微跟一下,就会发现js是在match1.js 中。但是和浏览器对比了一下,哎值不一样。

2024-04-29 23:19:10 141

原创 某h5set参数

对比一下标准算法,加密一致,分别是md5和sha256. ijk计算好以后,body对象通过sha256加密,生成新的一个json去获取h5sec.这个js 用了ob 混淆,为了省头发,全量抠一下拿下来。这个js 是用ast 预先大概处理了一下,只还原了函数,本地覆盖一下即可。通过对图二和图1 断点分析,可以发现在进入sign 以后有了h5set参数。是个异步函数,执行到刚才的js里 ,会返回个json,包含h5st 的参数。依然在还原过的js里寻找,会在上面发现如下的函数。这是图1 附近的一些js,

2024-02-22 16:46:23 265

原创 可配置trace/参数打印/so主动加载

通过文件配置trace是否打印调用栈,以及java层调用栈打印调用入参。相对于之前的,增加了输入参数。

2024-01-28 11:22:12 183

原创 Frida 常见检测/root检测/vpn检测/持续更新

Frida 常见检测/root检测/vpn检测/持续更新。

2024-01-24 17:54:49 753

原创 hook initarray,jni_onload,pthread (用来过检测),so调用栈,替换函数,hexdump,fridatrice,异常处理

总体来说,dlopen 用于在运行时加载共享库,而 init 和 init_array 则用于执行库的初始化工作。当一个共享库被 dlopen 加载时,如果该库包含一个名为 init 的特殊函数,系统将在加载后立即调用该函数。数组中的每个函数指针都指向一个初始化函数,这些函数在 init 函数执行后被调用,它们按照数组的顺序依次执行。通过 dlopen,可以在程序运行时加载共享库并获取其句柄,使得程序能够调用共享库中的函数。init_array 是一个包含函数指针的数组,其中的函数会在共享库加载时被调用。

2024-01-24 15:43:49 244

原创 so等相关的frida函数大全

so等相关的frida函数大全。

2024-01-24 15:21:09 509 1

原创 so主動調用任意函數读写文件jni函数hook及调用so堆栈二级指针构造native在哪个so

分动态和静态 静态注册hook dlsym。推荐第一种 第二个要构造函数。确认native在哪个so。frida 读写文件。通过libc 写文件。主动调用需要二级指针。

2024-01-23 18:20:45 152 1

原创 frida java层加密自吐,修改str ,dlopen,内存读写,so内存dump

操作字符串的返回值1。操作字符串的返回值2。操作字符串的返回值3。

2024-01-23 11:26:50 616 1

原创 so入门分析

看一下堆栈 在jadx中,直接看 at com.maihan.tredian.net.MhRequestUtil.a(MhRequestUtil.java:19)在上层函数,用objection hook一下 确定了这个函数。说明 tzrd 是java 层的加密,账密iv都有了。更多内容请移步公众号一起学习,同篇笔记可能会有更新喔。拖进去打开一下 ,是导出函数、 f5 反编译一下。把这个参数解密一下: base64。去hook一下 这个 base64。实际上就是最后加了一串这个参数。

2024-01-22 15:50:09 943

原创 frida 持久化源码修改及效果

安卓13 新增类 在 “build/soong/scripts/check_boot_jars/package_allowed_list.txt”)).**一定要给so 放进去 data/local/tmp/tools/gadget/lib64/ **最重要 : 启动的时候加载gadget。把config.js写进去。

2024-01-22 12:49:46 516

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除