160个crackme03
160个crackme03
打开页面首先是一个7秒的等待NEG,OD打开。
猜测程序一开始的初始401000地址运行这个命令,先内存定位到401000处,搜索time,找到如图
看到timer命令后往下面找7秒,这里是小端存储,7秒是7000毫秒,0x1B58就是需要的时间,这里直接改为0001。
接下来就是要破解序列号,F9运行
通过找到字符串定位判断函数,往上找到该函数的起点,下断点,单步运行
获取用户名长度 然后根据得到的结果算出来一个值 我这里这个结果为622335
首先将刚才计算的结果转为浮点数 放入到FPU栈 然后将结果加上2.0 得到622337。逆向这个程序你并不需要 看懂每一条浮点指令,只需要单步跟踪 然后时时观察FPU栈的情况。
还是将刚才的结果转为浮点数并入栈 然后将622289乘以一个值再减去一个值 最后得到结果ST0=1867009,最后减一个数就是正确的序列号。
1867024
DASCTF Oct X 吉林工师 逆向
DASCTF Oct X 吉林工师 逆向魔法叠加题目给了一个pyc和txt,先uncompyle6反编译一下,发现错误,那应该是pyc文件错误,修改文件头
题目这是2.7的版本,修改一下,1个字节0x73为TYPE_CODE字段, 表示该字段为string格式,这段就是字节码的位置,7102这个多了,删除掉,修改34为32.
修改好后可以正常反编译
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647# uncompyle6 version 3.7.4# Python bytecode 3.7 (3394)# Decompiled from: Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)]# Embedded file name: ./2.py# Compiled at: 2021-10-20 11:56:04# Size of source ...
160crackme02
程序使用Virtual Basic写的 无壳
分析程序
you get wrong try again
程序是使用用户名和序列号的方式加密 载入OD 随便输入一个 用户名和密码 来到第一处关键校验处
往上找看看函数的主要算法在哪里
求出了用户名的长度
将用户名长度乘以0x17CFB 得到结果 如果溢出则跳转
将结果再加上用户名的第一个字 符的ASCII
将结果转为十进制
将结果和AKA进行拼接 得到最后的序列号
注册机
1234567891011121314151617181920212223242526272829#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <stdlib.h>#include <windows.h>int main(){//密码char key1[4] = "AKA";//输入用户名char username[10] = { 0 };printf("请输入用户名:" ...
160crackme-01
程序是使用delphi编写的 无壳
分析程序整个程序分为两部分 一个是序列号+用户名 一个是单纯的序列号 我们需要把两个部分都解出来首先来解决序列号部分
分析Serial随便输入一组错误的序列号 程序弹出一个失败的提示框
那么首先可以从这个字符串入手 载入OD
找到字符串之后反汇编窗口跟随 可以看到在错误的提示上面有一个正确的提示 和一个关键跳转42F4D5,如果不等于0就跳转到输出错误的地方,正确的话就输出congratz!
再往上会看到一个比较函数 而关键跳转就是根据这个函数来执行的 所以我们在这个函数上下断点 输入一个错误的序 列号 然后等待程序的断下,这里我们输入的是111111111
根据传入的参数可知 函数将eax和edx进行比较 然后根据比较的结果进行跳转 所以第一个序列号是一个固定的硬编 码 Hello Dude!
输入 Hello Dude! 程序弹出正确提示 序列号部分完成
分析Serial/Name先随意输入一点数值,看回显
这里输出sorry…..通过字符串定位函数
下断点运行
首先检测用户名长度是否大于等于4,如果不是则提示错误
接着是用户名的计 ...
鲲鹏杯RE WP
RE1![1](鲲鹏杯re wp/1.PNG)
直接打开主函数,Str1与字符串akhb~chdaZrdaZudqduvdZvvv|比较,往上看,找到对输入的flag的加密部分,每一个字符先异或再加一,逻辑清楚了,直接解
12345a = 'akhb~chdaZrdaZudqduvdZvvv|'flag = ''for i in range(len(a)): flag+= chr((ord(a[i])-1)^6)print(flag)
RE2查壳,UPX,脱壳后拖入IDA
可以直接看到输入flag后与字符串HappyNewYear!比较,flag就是HappyNewYear!
RE3进去看到main函数
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162__int64 __fastcall main(int a1, char **a2, char **a3){ ...