这个CM比较委婉,PHI写的…不知道啥时候养成的习惯~
就是在PHI写的程序遇到CALL的时候直接跳过观察栈堆和内存变化…
看见CALL不跟直接跳悲剧啊…
这个习惯不好 要多多跟进
当然不调试直接A是最好的结果
/***************************************/
一组可用Key:
ShadowKong
170034084450000
光荣在于平淡,艰巨在于漫长
这个CM比较委婉,PHI写的…不知道啥时候养成的习惯~
就是在PHI写的程序遇到CALL的时候直接跳过观察栈堆和内存变化…
看见CALL不跟直接跳悲剧啊…
这个习惯不好 要多多跟进
当然不调试直接A是最好的结果
/***************************************/
一组可用Key:
ShadowKong
170034084450000
在很长很长一段时间里,我懵懂的活在理所当然中.
完全看不清自己的位置所在
很多人都在没人知道的地方努力着
突然的一天会成长到足矣颠覆你心中N年前的印象
毕业在即,面临着各种事情
现在比几个月前淡然很多
Z+的那辉哥说得好,当你感觉到活得不舒服的时候 就是你成长的时候
我在很长很长一段时间里都活在安逸的环境里 或者说是安逸的心境里
突然有一天 发现身边一切都变了,其实发现大家都在你不知道的地方改变着自己~
我是个愤青,虽然我口头一直狡辩自己是个圆滑的小男人
其实我愤青极了.愤CG愤陶瓷愤各种潜
虽然也经常被各种潜
我一直想让自己不愤 但是愤情总是在不经意间被调起来
在很长很长一段时间里 我非常的理所当然 非常的自以为是 非常的自我感觉良好
其实少年应务实
完全没有把现实梦想化而使自己啊Q化的必要
面对即将就业
其实在这方面我现在依然说白了是没啥想法或者是没啥打算再或者是没啥定性的决定的.
或者说其实还是想干啥的但是按照目前的情况根本不可能
这算是悲剧还是喜剧?
其实我一点都不迷茫一点都不紧张
我没有认为我真能混到啥
也没有认为肯定不会回家耕田
但我觉得这个大学真正让我学到了东西
而且必定是一辈子受用的东西
即使毫无一技之长 我面对社会 会勇往直前
感谢HZU 感谢信管
我辈太浮躁 少年应务实
这个CM比较特别,加入了FS:[0]SEH检测OD跟踪的功能~
但是我们并不倡导跟踪和调试,要学会把握静态反汇编,所以这对我们无障碍
若真要跟踪,直接把SEH去掉便是~
/*****************************************************/
/*****************************************************/
这个CM要注意,隐藏的规定Name长度
一组可以Key:
ShadowKong
b30101b8
指令 | 功能 |
---|---|
AAA | 调整加 |
AAD | 调整除 |
AAM | 调整乘 |
AAS | 调整减 |
ADC | 进位加 |
ADD | 加 |
AND | 与 |
ARPL | 调整优先级 |
BOUND | 检查数组 |
BSF | 位右扫描 |
BSR | 位左扫描 |
BSWAP | 交换字节 |
BT | 位测试 |
BTC | 位测试求反 |
BTR | 位测试清零 |
BTS | 位测试置一 |
CALL | 过程调用 |
CBW | 转换字节 |
CDQ | 转换双字 |
CLC | 进位清零 |
CLD | 方向清零 |
CLI | 中断清零 |
CLTS | 任务清除 |
CMC | 进位求反 |
CMOVA | 高于传送 |
CMOVB | 低于传送 |
CMOVE | 相等传送 |
CMOVG | 大于传送 |
CMOVL | 小于传送 |
CMOVNA | 不高于传送 |
CMOVNB | 不低于传送 |
CMOVNE | 不等传送 |
CMOVNG | 不大于传送 |
CMOVNL | 不小于传送 |
CMOVNO | 不溢出传送 |
CMOVNP | 非奇偶传送 |
CMOVNS | 非负传送 |
CMOVO | 溢出传送 |
CMOVP | 奇偶传送 |
CMOVS | 负号传送 |
CMP | 比较 |
CMPSB | 比较字节串 |
CMPSD | 比较双字串 |
CMPSW | 比较字串 |
CMPXCHG | 比较交换 |
CMPXCHG486 | 比较交换486 |
CMPXCHG8B | 比较交换8字节 |
CPUID | CPU标识 |
CWD | 转换字 |
CWDE | 扩展字 |
DAA | 调整加十 |
DAS | 调整减十 |
DEC | 减一 |
DIV | 除 |
ENTER | 建立堆栈帧 |
HLT | 停 |
IDIV | 符号整除 |
IMUL | 符号乘法 |
IN | 端口输入 |
INC | 加一 |
INSB | 端口输入字节串 |
INSD | 端口输入双字串 |
INSW | 端口输入字串 |
JA | 高于跳转 |
JB | 低于跳转 |
JBE | 不高于跳转 |
JCXZ | 计数一六零跳转 |
JE | 相等跳转 |
JECXZ | 计数三二零跳转 |
JG | 大于跳转 |
JL | 小于跳转 |
JMP | 跳转 |
JMPE | 跳转扩展 |
JNB | 不低于跳转 |
JNE | 不等跳转 |
JNG | 不大于跳转 |
JNL | 不小于跳转 |
JNO | 不溢出跳转 |
JNP | 非奇偶跳转 |
JNS | 非负跳转 |
JO | 溢出跳转 |
JP | 奇偶跳转 |
JS | 负号跳转 |
LAHF | 加载标志低八 |
LAR | 加载访问权限 |
LDS | 加载数据段 |
LEA | 加载有效地址 |
LEAVE | 清除过程堆栈 |
LES | 加载附加段 |
LFS | 加载标志段 |
LGDT | 加载全局描述符 |
LGS | 加载全局段 |
LIDT | 加载中断描述符 |
LMSW | 加载状态字 |
LOADALL | 加载所有 |
LOADALL286 | 加载所有286 |
LOCK | 锁 |
LODSB | 加载源变址字节串 |
LODSD | 加载源变址双字串 |
LODSW | 加载源变址字串 |
LOOP | 计数循环 |
LOOPE | 相等循环 |
LOOPNE | 不等循环 |
LOOPNZ | 非零循环 |
LOOPZ | 为零循环 |
LSL | 加载段界限 |
LSS | 加载堆栈段 |
LTR | 加载任务 |
MONITOR | 监视 |
MOV | 传送 |
MOVSB | 传送字节串 |
MOVSD | 传送双字串 |
MOVSW | 传送字串 |
MOVSX | 符号传送 |
MOVZX | 零传送 |
MUL | 乘 |
MWAIT | |
NEG | 求补 |
NOP | 空 |
NOT | 非 |
OR | 或 |
OUT | 端口输出 |
OUTSB | 端口输出字节串 |
OUTSD | 端口输出双字串 |
OUTSW | 端口输出字串 |
POP | 出栈 |
POPA | 全部出栈 |
POPF | 标志出栈 |
PUSH | 压栈 |
PUSHA | 全部压栈 |
PUSHF | 标志压栈 |
RCL | 进位循环左移 |
RCR | 进位循环右移 |
RDMSR | 读专用模式 |
RDPMC | 读执行监视计数 |
RDSHR | |
RDTSC | 读时间戳计数 |
REP | 重复 |
REPE | 相等重复 |
REPNE | 不等重复 |
RET | 过程返回 |
RETF | 远过程返回 |
RETN | 近过程返回 |
ROL | 循环左移 |
ROR | 循环右移 |
RSM | 恢复系统管理 |
SAHF | 恢复标志低八 |
SAL | 算术左移 |
SALC | |
SAR | 算术右移 |
SBB | 借位减 |
SCASB | 扫描字节串 |
SCASD | 扫描双字串 |
SCASW | 扫描字串 |
SETA | 高于置位 |
SETB | 低于置位 |
SETE | 相等置位 |
SETG | 大于置位 |
SETL | 小于置位 |
SETNA | 不高于置位 |
SETNB | 不低于置位 |
SETNE | 不等置位 |
SETNG | 不大于置位 |
SETNL | 不小于置位 |
SETNO | 不溢出置位 |
SETNP | 非奇偶置位 |
SETNS | 非负置位 |
SETO | 溢出置位 |
SETP | 奇偶置位 |
SETS | 负号置位 |
SGDT | 保存全局描述符 |
SHL | 逻辑左移 |
SHLD | 双精度左移 |
SHR | 逻辑右移 |
SHRD | 双精度右移 |
SIDT | 保存中断描述符 |
SLDT | 保存局部描述符 |
SMI | |
SMINT | |
SMINTOLD | |
SMSW | 保存状态字 |
STC | 进位设置 |
STD | 方向设置 |
STI | 中断设置 |
STOSB | 保存字节串 |
STOSD | 保存双字串 |
STOSW | 保存字串 |
STR | 保存任务 |
SUB | 减 |
SYSCALL | 系统调用 |
SYSENTER | 系统进入 |
SYSEXIT | 系统退出 |
SYSRET | 系统返回 |
TEST | 数测试 |
UD0 | 未定义指令0 |
UD1 | 未定义指令1 |
UD2 | 未定义指令2 |
UMOV | |
VERW | 校验写 |
WAIT | 等 |
WBINVD | 回写无效高速缓存 |
WRMSR | 写专用模式 |
WRSHR | |
XADD | 交换加 |
XBTS | |
XCHG | 交换 |
XLAT | 换码 |
XOR | 异或 |
XSTORE |
指令 | 功能 |
---|---|
EMMS | 媒体空MMX状态 |
F2XM1 | 浮点栈顶绝对值 |
FADD | 浮点加 |
FADDP | 浮点加出栈 |
FBLD | 浮点加载十数 |
FBSTP | 浮点保存十数出栈 |
FCHS | 浮点正负求反 |
FCLEX | 浮点检查错误清除 |
FCMOVB | 浮点低于传送 |
FCMOVBE | 浮点不高于传送 |
FCMOVE | 浮点相等传送 |
FCMOVNB | 浮点不低于传送 |
FCMOVNBE | 浮点高于传送 |
FCMOVNE | 浮点不等传送 |
FCMOVNU | 浮点有序传送 |
FCMOVU | 浮点无序传送 |
FCOM | 浮点比较 |
FCOMI | 浮点比较加载标志 |
FCOMIP | 浮点比较加载标志出栈 |
FCOMP | 浮点比较出栈 |
FCOMPP | 浮点比较出栈二 |
FCOS | 浮点余弦 |
FDECSTP | 浮点栈针减一 |
FDISI | 浮点检查禁止中断 |
FDIV | 浮点除 |
FDIVP | 浮点除出栈 |
FDIVR | 浮点反除 |
FDIVRP | 浮点反除出栈 |
FENI | 浮点检查禁止中断二 |
FFREE | 浮点释放 |
FFREEP | 浮点释放出栈 |
FIADD | 浮点加整数 |
FICOM | 浮点比较整数 |
FICOMP | 浮点比较整数出栈 |
FIDIV | 浮点除整数 |
FIDIVR | 浮点反除 |
FILD | 浮点加载整数 |
FIMUL | 浮点乘整数 |
FINCSTP | 浮点栈针加一 |
FINIT | 浮点检查初始化 |
FIST | 浮点保存整数 |
FISTP | 浮点保存整数出栈 |
FISTTP | |
FISUB | 浮点减整数 |
FISUBR | 浮点反减整数 |
FLD | 浮点加载数 |
FLD1 | 浮点加载一 |
FLDCW | 浮点加载控制器 |
FLDENV | 浮点加载环境 |
FLDL2E | 浮点加载L2E |
FLDL2T | 浮点加载L2T |
FLDLG2 | 浮点加载LG2 |
FLDLN2 | 浮点加载LN2 |
FLDPI | 浮点加载PI |
FLDZ | 浮点加载零 |
FMUL | 浮点乘 |
FMULP | 浮点乘出栈 |
FNCLEX | 浮点不检查错误清除 |
FNDISI | 浮点不检查禁止中断 |
FNENI | 浮点不检查禁止中断二 |
FNINIT | 浮点不检查初始化 |
FNOP | 浮点空 |
FNSAVE | 浮点不检查保存状态 |
FNSTCW | 浮点不检查保存控制器 |
FNSTENV | 浮点不检查保存环境 |
FNSTSW | 浮点不检查保存状态器 |
FPATAN | 浮点部分反正切 |
FPREM | 浮点部分余数 |
FPREM1 | 浮点部分余数二 |
FPTAN | 浮点部分正切 |
FRNDINT | 浮点舍入求整 |
FRSTOR | 浮点恢复状态 |
FSAVE | 浮点检查保存状态 |
FSCALE | 浮点比例运算 |
FSETPM | 浮点设置保护 |
FSIN | 浮点正弦 |
FSINCOS | 浮点正余弦 |
FSQRT | 浮点平方根 |
FST | 浮点保存 |
FSTCW | 浮点检查保存控制器 |
FSTENV | 浮点检查保存环境 |
FSTP | 浮点保存出栈 |
FSTSW | 浮点检查保存状态器 |
FSUB | 浮点减 |
FSUBP | 浮点减出栈 |
FSUBR | 浮点反减 |
FSUBRP | 浮点反减出栈 |
FTST | 浮点比零 |
FUCOM | 浮点无序比较 |
FUCOMI | 浮点反比加载标志 |
FUCOMIP | 浮点反比加载标志出栈 |
FUCOMP | 浮点无序比较出栈 |
FUCOMPP | 浮点无序比较出栈二 |
FWAIT | 浮点等 |
FXAM | 浮点检查 |
FXCH | 浮点交换 |
FXTRACT | 浮点分解 |
FYL2X | 浮点求L2X |
FYL2XP1 | 浮点求L2XP1 |
MOVED | 媒体双字传送 |
MOVEQ | 媒体四字传送 |
PACKSSDW | 媒体符号双字压缩 |
PACKSSWB | 媒体符号字压缩 |
PACKUSWB | 媒体无符号字压缩 |
PADDB | 媒体截断字节加 |
PADDD | 媒体截断双字加 |
PADDSB | 媒体符号饱和字节加 |
PADDSIW | |
PADDSW | 媒体符号饱和字加 |
PADDUSB | 媒体无符号饱和字节加 |
PADDUSW | 媒体无符号饱和字加 |
PADDW | 媒体截断字加 |
PAND | 媒体与 |
PANDN | 媒体与非 |
PAVEB | |
PCMPEQB | 媒体字节比等 |
PCMPEQD | 媒体双字比等 |
PCMPEQW | 媒体字比等 |
PCMPGTB | 媒体字节比大 |
PCMPGTD | 媒体双字比大 |
PCMPGTW | 媒体字比大 |
PDISTIB | |
PMACHRIW | |
PMADDWD | |
PMAGW | |
PMULHRIW | |
PMULHRWC | |
PMULHW | |
PMVGEZB | |
PMVLZB | |
PMVNZB | |
PMVZB | |
POR | 媒体或 |
PSLLD | 媒体双字左移 |
PSLLQ | 媒体四字左移 |
PSLLW | 媒体字左移 |
PSRAD | 媒体双字算术右移 |
PSRAW | 媒体字算术右移 |
PSRLD | 媒体双字右移 |
PSRLQ | 媒体四字右移 |
PSRLW | 媒体字右移 |
PSUBB | 媒体截断字节减 |
PSUBSB | 媒体符号饱和字节减 |
PSUBSIW | |
PSUBSW | 媒体符号饱和字减 |
PSUBUSB | 媒体无符号饱和字节减 |
PSUBUSW | 媒体无符号饱和字减 |
PSUBW | 媒体截断字减 |
PUNPCKHBW | 媒体字节高位解压 |
PUNPCKHDQ | 媒体双字高位解压 |
PUNPCKHWD | 媒体字高位解压 |
PUNPCKLBW | 媒体字节低位解压 |
PUNPCKLDQ | 媒体双字低位解压 |
PUNPCKLWD | 媒体字低位解压 |
今天这个CM主要的是算法逆向的问题…一段简单的算法代码:
/************************************************/
其中eax==KeyLen
明显这个CM的验证格式是 f1(Name)==f2(Key);
写注册机的时候f1是非逆,所以f1(Name)的值很容易得到,写注册机的关键是逆f2();
这里的注册机只逆了当NameLen<=0x05的情况….
完美的注册机可以参考这注册机代码后再斟酌斟酌
一组可以Key:
Kong
=416530
注册机f2()逆完全是我个人推算出 和CM本身算法有点小区别
可以在Key前面加任何多个任何字符都OK~
正如标题所言,这个CM仅次于之前的构造:
004xxx01 Call 004xxxx1
004xxx01 cmp EDI,0
004xxx01 JNZ offset[ 悲剧]
……..
……..
004xxxx1 XOR EDI EDI
004xxxx2 NOP
004xxxx3 RETN
机器码小关键CALL的CM,构造机器码的这个CM是迄今为止我觉得最有水平的 虽然可能这个CM的水平一般~但思路非常牛B
今天这个CM的关键算法位置居然是在API MessageBox的跳转过程中嵌入~怎么做到的??一般人肯定不会去跟一个对它非常熟悉的API
就像我第一次肯定不会去跟MessageBox一样..但重要部分恰恰在其中.非常希望能知道作者是怎么办到的~非常高明啊 佩服作者的思维和想法~
/*经过这几天的试验,其实实现这种方式很简单,这涉及API调用的高效和低效的问题
首先 高效的API调用一般都是:
CALL DWORD PTR [ FUNCTION OFFSER IN LAT]
低效的API调用一般是:
CALL @F
@@:
JMP WORD PTR [FUNCTION OFFSET IN LAT]
如果在一个低效的API的JMP前加入算法CALL的话 这就可以实现类似这个CM的情况了~
理论上应该是这样子的 通过修改DASM绝对可以实现 但是通过MASM编程直接实现可能还要委婉一点~
.还最后要说的是 API调用的高效低效 还和约定调用方式有关*/
ShadowKong
16f267241d165BBC694a463A3802694A1a68105A
今天这个CM非常漂亮!很多地方可圈可点啊~今天拿几个地方出来自我欣赏欣赏~
One:
今天的CM是控制台的呵呵~
也算是一种类型了,完全没有API调用(其实API调用也就是封掉了一些东西 或者说MS直接给个函数你用 而不用你自己Dim),虽然是用PHI写的,但估计用0x10Asm写的也这样差不多~
反汇编这类小CM要主意的是.找对关键算法CALL,此CM依然算法简单到鬼一样~
但是其中PHI控制台的编码结构能让人眼前一亮 如果你长时间和各种invoke打交道的话~
但是这不是我今天要说的,我今天要说的是比较底层(16位汇编)的编码取得NameLen(用户名长度)或者KenLen 或者各种Len的问题.
首先看下面一段小代码:
请把地址忽略只看中间0x00405BED到0x00405BDF1部分,如果你经常在您的程序中调用API 你就会知道 这个其实很简单,不就是GetDlgItemTextA/W的返回值么?对的 就是取这个返回值,我们看不用API的情况下是怎么取得的~就是这三句代码,运用搜索SCAS返回NameLen
可见这是逐个判断 然后JNE则+1的~这比直接调用API得到返回值更清晰细腻
知道这个有什么用?一般如果是crackme 而且是反汇编后看不到一大堆API调用的crackme,都会有关于计算这类Len的CALL
在大堆Call中识别出这类Call能帮助你更快速的找到关键算法Call 而没有必要一个一个Call跟进去..好了 就这小目的而已 适合我等菜~
一组可用Key:
ShadowKong
115
如标题,这个CRACKME非常简单…也非常适合我等熟悉反汇编,每日一CrackMe还是必须要做的工作~
呃 今天有点晚呢~
下次争取剪短时间完成!
用了内联反汇编还搞那么慢,实在非常~
一组可用Key:
ShadowKong
643062706f1b3
今天的CM还是一如既往的不难,适合各种练手~
还是一如既往的反汇编直接读写~
今天那平安保险的小妞给我打电话笑死哥了~
请问先生您生日多少呢?
呃`不想告诉你咋办?
#$@$10秒后 请问先生您的生日是多少呢?我们不会打听您的隐私~
呃`不能告诉你咋办?
@$@#$@20秒后 那请问先生您的生日多少呢?
呃~就不告诉你!
!@#@#30秒后 那先生你可以挂电话咯~
呃~靓妹你也可以挂电话了~
电话那头笑趴了~这头也趴了
一组可用KEY:
ShadowKong
ACA0-0193-DAF5-396F