最新

逆向

脱壳小试

前言 关于IDA的中文教程确实少,没有实例甚至讲解,都是自己琢磨的 本文是我按照网上其他人写的用ollydbg脱壳思路,这里尝试使用ida pro进行脱壳,该crackme在其他地方并没有脱壳教程 crackMe 前面有一节的TBM crackMe 逆向 是直接跳过脱壳部分,这一节补一下 ESP定律 ESP定律就是利用堆栈平衡的原理,迅速找到OEP(真实的程序入口) 通常的壳会把一些真实程序运行的资源进行压缩,等到压缩程序运行起来的时候,先进行解压,再跳到OEP的继续运行真实程序 在解压之前需要把当前环境进行保存,例如寄存器esp,那么在此下硬件断点,当压缩程序尝试恢复该寄存器值时,必然会去访问该保存,此时就能被前面的断点断住 环境 win10 ida pro Version 6.8.150423 (64-bit) crackMe TBM scylla x64 v0.9.7c PEID V0.95.EXE(可选)

By chainhelen

逆向

crackme 一只老虎

环境 看雪论坛的附件,其中序列号的第二题 IDA PRO 破解版 Version 6.8.150423 (64-bit) 入口 首先输入任意字符串注册注册名 : qianhailong ; 注册码 : longlong 点击注册,显然因为输入有问题错误而没有任何弹窗 拖入IDA PRO,断点调试,首先需要找到入口 思路一,尝试寻找类似GetDlgItemTextA获取字符串的导入函数 ,并没有什么发现,只有可疑的GetWindowTextA、GetWindowTextW、GetKeyNameTextA 先此几处下断点,此时看到的现象是多种事件行为都会触发这几个函数,例如click、 focus等,难以调试 思路二,寻找关键字符串,view -> open subviews -> strings 或者 热键shift+F12,然而也没有什么线索,还有几处中文乱码不清楚是什么 思路三,点击事件,在Functions

By chainhelen
crackme TBM

逆向

crackme TBM

环境 看雪论坛的附件,其中序列号的第一题 IDA PRO 破解版 Version 6.8.150423 (64-bit) 含有下文注释的ida pro数据文件 过程 (跳过UPX脱壳过程) 首先在界面中输入Name,和Serial,发现错误的情况并不会有弹窗 拖入IDA,可见Functions View 导入表中含有GetDlgItemTextA,那么在此处DLL设下断点 输入Name: woshi; Serial : 1234567运行触发 触发点断后,返回上一层CR-F7 或者 Run until Return seg019:00401539 call GetDlgItemTextA seg019:0040153E mov ebx, eax seg019:00401540 or ebx, ebx ; 验证Name填入不可为空

By chainhelen

LCA

LCA

最近共同祖先 看题 从1到n标号的城市,m条含有权重边,c次询问任意两城市之间的最小加权路径 思路 不是一棵树(这里应该是环)上的,思路很简单,用并查集即可判断 同一棵树上的,可以采用 Tarjan 离线算法 核心伪代码 for(int i = 1;i <= n;i++) { if(!vis[i]) { LCA(i); } } void LCA(int u) { father[u] = u; //重新指定自己 vis[u] = 1; //标记已经完成扫描 for(int i = head[u]; i != -1; i = edge[

By chainhelen

mq

rocketmq 初试

环境 个人电脑 win10、jdk1.8.0_121、idea2.6.2、rocketmq4.0.0-incubating、mvn3.3.9 下载源码 一开始下载rocketmq的源码3.5.8,但是导入idea编译报错 Error:(34, 8) java: com.alibaba.rocketmq.broker.plugin.MockMessageStore不是抽象的, 并且未覆盖com.alibaba.rocketmq.store.MessageStore中的抽象方法lockTimeMills() 猜测是jdk版本问题,我没有解决 选择了新的版本4.0.0-incubating 导入idea 选择 File -> New -> Project

By chainhelen

java

chlang 初版

关于chlang 这是个玩具解释器,通过完成它学习了许多关于编译器前端的知识点 github地址 本来这是个c语言项目,由于c语言实现实在过于繁琐,遂弃坑转为java,采用maven的项目管理结构 本语言主要参考了《自制编程语言》、c4的源代码 本文更新于2017.06.21 词法分析 词法分析器所在代码 主要有三个java文件构成,不讲一些自动机相关知识,默认已知 TOKEN_TYPE.java 1. 主要描述符号类型,带有RW开头的表示Reserved Word,也就是保留关键词 2. 最早期的开发比较简单,并没有 '>=' 这类的关系运算符,不会跟'='冲突产生太多的lookhead,这一部分是之后才加上的 3. 语言中只支持两种基础数据类型,整型(int)和字符串(string),当然为了实现闭包,还有函数这个数据类型,但不在这里体现 TOKEN.java

By chainhelen
语言的流程控制

编译器

语言的流程控制

问题 最近在写一个解释器,碰到一个关于控制流程问题,有感而发 起初我按照bnf范式写了一堆生成抽象语法树的代码,在eval.java中准备从tree root出发进行遍历计算每一个表达式(解释语句)。其中有一个核心函数recursionEvalAstNode每次递归传入每个节点(的子节点)。所以函数这个参数就是树上的节点parentAstNode。那么问题来了 包含一些控制流程的语句(break、continue、return,但if不是很明显) 比如说的return statement,一旦执行到这里,就应该退回wrap-function执行的地方,并把返回节点interpret result(可能是含有子节点的expression节点)存储在栈或者寄存器里"带出去",另一方面上叙采用的是用递归计算方式,return statment的同级 next sibling node还在上一层的递归里面呢,怎么告诉上一层它不用算了 图形结合 没有图!!! 题外话 这里可以看到,我在设计recursionEvalAstNode其实只想到了context-fre

By chainhelen

mysql

MySQL 通用查询日志

首先推荐一款linux下的mysql客户端mycli mysql里面有很多日志,如bin日志用来恢复数据,慢查询日志用来监控查询较慢的数据 只记了通用日志的开启方式,其他的日志都是类似命令 mysql root@localhost:(none)> show global variables like '%gener%'; +------------------+--------------------------------------------+ | Variable_name | Value | |------------------+--------------------------------------------| | general_log | OFF | | general_log_file | /var/lib/mysql/iZwz92pw32r9w6beu4jlfpZ.log | +-

By chainhelen
从正则表达式到NFA

NFA

从正则表达式到NFA

正则表达式 定义 : 正则表达式可以描述所有通过对某个字母表上的符号应用并、连接、闭包运算而得到的语言;可以用正则表达式定义的语言叫做正则集合 性质 : 如果两个正则表达式 r 和 s 表示同样的语言,则称 r 和 s等价 遵循一些代数性质 定律 描述 \( r | s = s | r \) | 是可以交换 \( r|(s|t) = (r|s)|t \) | 是可结合的 \( r(st) = (rs)t \) 连接是可结合的 \( r(s|t)=rs|rt \);\( (s|t)r=sr|tr \) 连接对|是可分配的 \( \epsilon r=

By chainhelen

自动机

子集构造法

概念 首先介绍一下 有限自动机 FA (Finite Automate)的概念,形式上它是一个五元组 \( (S, \sum, \delta, s_0, S_A) \) 1. \( S \) 是识别器的有限状态集,以及一个错误状态\( S_e\) 2. \( \sum \)是识别器使用的有限字母表。通常,\( \sum \) 是转移图中边的标签合集 3. \( \delta(s, c) \)是识别器的转移函数。它将每个状态 \(s \in S \)和每个字符\(c \in \sum \)映射到下一个状态。在状态\( s_i \)遇到输入字符\(c\),FA将采取\(s_i \rightarrow^

By chainhelen