binary ninja vscode远程调试bn脚本
折腾一天的binary脚本远程调试,决定记下来以免下次接着犯错
感谢s0rry的博客给的启示!
错误记录python配置成本地的python3.11的版本之后,按照官方文档的流程,首先安装了python311的debugpy,然后打开vscode远程调试并正常配置。但是在binaryninja测运行connect_vscode_debugger(port=5678)后显示time out,且vscode远程调试点击后显示访问refuse
解决方法用bn原生的python,用ctrl + p打开搜索栏并选择install python3 module
输入debugpy进行安装,安装的log在这里看,失败的话自己康康原因,我这里是直接成功的
by the way我的脚本需要keystone,安装keystone的时候报错了,解决办法是直接在已经装好keystone的python311的site-package目录下复制keystone文件夹并复制到bn的python的package目录下。我的目录是C:\Users\{yourname}\AppData\Roaming\Bi ...
unity游戏开发学习笔记
想在毕业前整出一个东方二创游戏,于是开了坑。
视频参考https://www.bilibili.com/video/BV1jK411V7V7?p=4&spm_id_from=pageDriver&vd_source=aca2ef475df4152d76052947baf25a61
c#相关匿名函数 canvasGroup.DOFade(0, fade_time).onComplete = ()=>{
gameObject.SetActive(false);
};
和js差不多,可以用这种方式构造一个匿名函数
unity使用组件physics2D2D游戏的物理效果
RigidBody2D2d刚体,加上后会有重力效果
Box Collider 2D2D的碰撞box,可以设置物体的碰撞体积,用编辑碰撞器来设置体积
RenderingSprite Renderer一般用来放置图像
miscellaneousAnimator动画自动机,会在asset里面创建一个动画文件一个状态机。动画文件可以进行编辑动画,状态机是不同动画 ...
rust学习笔记
因为好奇而学一波rust,随时可能退坑。记录只记对自己重要的部分,查漏补缺用
rustlings和圣经同步学习,包含大量圣经原文原代码,主要是想抄一遍记忆更深刻,rustling遇到后才看圣经
rust圣经学习基础概念入门变量绑定rust核心原则——所有权。任何内存对象都有主人,绑定就是把这个对象绑定给一个变量,让这个变量成为他的主人。同时该变量之前的主人回丧失对该对象的所有权。
变量可变性默认情况rust变量不可变,不过加上mut关键字可以让其变成可变的。
下划线开头忽略未使用变量用下划线开头的变量,如果后面没有被使用不会被警告。不用下划线开头会被警告
变量和常量的差异
常量不用mut,且自始自终不可变,编译完成后值已经确定
用const关键字而不是let声明,且值的类型必须标注
1const MAX_POINTS: u32 = 100_000;
变量遮蔽rust允许声明相同变量名,后面声明的变量会遮蔽之前的
和mut不一样,如果let声明的变量名字相同,他们只是恰巧名字相同,实际上指向的是不同的内存地址,涉及到内存的再分配。而mut关键字指定的变量赋值是访问的同一个内存地址 ...
南京大学jyy os学习笔记
和软件分析课一起学,都是每天俩小时,突发奇想记录一下做实验的日常
实验pstree10.5思考了如何保证输出的格式像标准的pstree一样。如下
123456789101112131415161718systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager───2*[{NetworkManager}] ├─VGAuthService ├─accounts-daemon───2*[{accounts-daemon}] ├─acpid ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─colord───2*[{colord}] ├─cpptools-srv───23*[{cpptools-srv}] ├─cron ├─cups-browsed───2* ...
南京大学软件分析-听课笔记
纯粹做学习记录,如有错误非常欢迎指出(
课程笔记lesson2invokespecial: call constructor, call superclass methods, call private methods
invokevirtual: instance methods call(virtual dispatch)
invokeinterface: cannot optimization, checking interface implementation
invokestatic: call static methods
method signature: class name: return type method name(para1,para2)
clinit初始化类的静态属性
类加载和初始化是两个操作,加载了不一定初始化。
123class A{ B b = ...}
上方的情况,b直接会被加载到内存,即使什么也没干,也没有进行new之类的操作。加载后就会初始化调用clinit的方法。而init是new的时候会调用。
lesson3Reac ...
Sofixer源码分析
学习一下内存dump文件后修复的原理。意识流分析,可能有些乱,敬请谅解(
函数分析先单独分析函数
ObElfReader::Load加载so文件的各类结构,以下是用到的函数
ObElfReader::FixDumpSoPhdr修正dump出来so的程序头表,这里是改变filesz扩大了之后dump的范围,不仅dump了LOAD部分的内存还dump了中间非LOAD段的内存。因为可能有些数据会留存在俩LOAD段之间
123456789101112131415161718192021222324252627282930313233343536373839void ObElfReader::FixDumpSoPhdr() { if (dump_so_base_ != 0) { std::vector<Elf_Phdr*> loaded_phdrs; //遍历program header table,将字段是LOAD的全部保存起来 for (auto i = 0; i < phdr_num_; i++) ...
frida常见使用及脚本收集
启动123456789adb push xxx.apk /sdcard/xxx.apkadb forward tcp:27042 tcp:27042adb forward tcp:27043 tcp:27043adb shellsucd /data/local/tmp./frida-server frida -U -l .\t1.js -f demo2.jni.com.myapplication
调试add 调试参数在xml里面加上
1android:debuggable="true"
调试init_array和JNI_Onload用frida spawn,加pause参数(16版本就–pause,14及以前的版本就不用加)。然后用ida attach后运行,frida命令行输入%resume后点击same就可以调试上,且可以调试init_array和JNI_Onload这些位置的函数
QBDI1setenforce 0
问题大全logcat中文乱码1chcp 65001
kill frida-server12netstat -tunlpkill -9 & ...
2023腾讯游戏安全比赛总结
结果决赛最终是拿到了安卓方向第四名。获得了1500q币和腾讯的面试绿色通道
过程获奖是用电话通知的,当天刚好公司给团建费,leader带我们去吃饭。全程也没咋看手机一直在聊天吃饭,手机因为习惯也开着是静音,吃完准备走人的时候看了一眼手机才发现,20分钟前有个腾讯的未接来电。当时就有种预感了,问了一下赛事负责人,那边重新又打了一遍电话,我才意识到,卧槽,真拿奖了。告知了名次是第四,问了实习意向。不记得当时啥感觉了,和做梦一样。
讲实话,我做的时候完全不觉得自己会拿奖。首先是去年前三都在,还见到好几个打ctf的时候见到过的很厉害的师傅。学安卓还不到一年,这架势直接给看傻了。决赛拿到题的时候发现和初赛是一个模板,以为又是虚拟机分析,用frida尝试hook后发现有反调试需要绕过,心直接凉了半截——初赛的反调试我都没完全绕过,决赛的咋整。
想着不管会不会都做三天,实在没结果之后面试也有东西说。于是真的就在电脑前坐了三天逆了三天,啥别的没干。本身是要去参加广东省省赛,我也直接拒掉了,这里还是有点对不起二队的大哥们,因为决赛分刚好和前一名差5分,前进一名就是一等奖,如果我在的话应该是有可能一等 ...
idapython函数学习笔记
idapython函数学习笔记记录一波idapython的学习,加深印象,之后找起来也方便。
长期更新
ida_bytespatch_byte(一次patch一个byte)第一个参数是起始地址,第二个参数是用什么进行填充。
next_head(参数的下个指令的地址)一个参数
到达参数的下个指令的地址。用来从一个指令步入下一个指令,而不是单纯的前进一个字节。
print_insn_mnem(返回指令)一个参数
返回参数地址的指令。比如当前指令是mov a1,1,调用这个函数就会返回mov。
print_operand(返回对应操作数的字符串)返回该地址的汇编指令的操作数的字符串,并用列表存储。
比如当前地址是mov eax,1,返回的列表的元素从小到大分别是eax,1(都是字符串形式!)
idcwait_for_next_exent(等待下个事件)1234567891011r""" wait_for_next_event(wfne, timeout) -> dbg_event_code_t Wait for the next event. ...
c++ STL函数分析
看完R1mao大佬的文章后的拙劣复现与分析,本文基本上都是复制R1mao大佬的,少部分是自己分析,可以支持一下R1mao大佬
https://bbs.kanxue.com/thread-275133.htm
准备找时间把所有常用的stl全部研究一遍,所以应该也是长期更新,有时间就搞
deque基础知识概论deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。
定义使用之前必须加相应容器的头文件:
1#include <deque> // deque属于std命名域的,因此需要通过命名限定,例如using std::deque;
定义的实现代码如下:
12345deque<int> a; // 定义一个int类型的双端队列adeque<int> a(10); // 定义一个int类型的双端队列a,并设置初始大小为10deque<int> a(10, 1); // 定义一个int类型的双端队列a,并设置初始大小为10且初始值都为1d ...