补充:

int(x,[base]):
就是将x(通常是一个字符串)按照base进制转换成整数。
比如:
int(‘’) ##转换成整数10
int('', ) ##''按16进制转换,将得到整数16
int('ff', ) ##得到255
int('ff') ## 出错,无法将字符串'ff'按照10进制转换。

对Python编程还是不太熟悉,因此借用了别人的脚本并做了分析

首先主函数代码:

 int __cdecl main(int argc, const char **argv, const char **envp)
{
signed int v3; // ebp@1
signed int i; // esi@1
int result; // eax@6
int v6; // [sp+0h] [bp-13Ch]@0
int v7; // [sp+0h] [bp-13Ch]@1
char v8; // [sp+Ch] [bp-130h]@1
char v9; // [sp+Dh] [bp-12Fh]@1
char v10; // [sp+Eh] [bp-12Eh]@1
char v11; // [sp+10h] [bp-12Ch]@1
char v12; // [sp+11h] [bp-12Bh]@1
__int16 v13; // [sp+71h] [bp-CBh]@1
char v14; // [sp+73h] [bp-C9h]@1
char v15; // [sp+74h] [bp-C8h]@1
char v16; // [sp+75h] [bp-C7h]@1
__int16 v17; // [sp+139h] [bp-3h]@1
char v18; // [sp+13Bh] [bp-1h]@1 v11 = ;
v15 = ;
memset(&v12, , 0x60u);
v13 = ;
v14 = ;
memset(&v16, , 0xC4u);
v17 = ;
v18 = ;
v8 = ;
v9 = ;
v10 = ;
sub_4011B9((int)aInputName, v6);
scanf(aS, &v11);
v3 = ;
for ( i = ; v3 < (signed int)strlen(&v11); ++i )
{
if ( i >= )
i = ;
sprintf(&v15, aS02x, &v15, *(&v11 + v3++) ^ *(&v8 + i));
}
memset(&v11, , 100u);
sub_4011B9((int)aInputSerial, v7);
scanf(aS, &v11);
if ( !strcmp(&v11, &v15) )
{
sub_4011B9((int)aCorrect, *(int *)&v8);
result = ;
}
else
{
sub_4011B9((int)aWrong, *(int *)&v8);
result = ;
}
return result;
}

题目中给了要求:

具体分析都写在了py脚本里了:

 #!/usr/bin/env python
import string
encode = [16,32,48]
I =0
dic =string.digits+string.letters+string.punctuation #数字字母标点,设置提取密码字典
Ser = ''
Sercmp ='5B,13,49,77,13,5E,7D,13'
Sercmp = Sercmp.split(',') for S in Sercmp:
for d in dic:
if encode[I%3]^ord(d) == int(S,16): #I%3>if(i>=3) encode[I%3]>v8+i
# if ( !strcmp(&v11, &v15) ) v11前v15S
# {
# sub_4011B9((int)aCorrect, *(int *)&v8);
# result = 0;
# }
print S
Ser+=d
I+=1
break
print Ser #Ser是密码 raw_input()

得到结果:

要学会自己用python写脚本。。。可就是迈不出第一步。

附:又找到一篇wp,可能这个看这更明白些:

name以3个字节为一组,每组分别与16,32,48异或并转换为16进制数,最后与serial对比,脚本如下

serial = '5B134977135E7D13'
name = '' for i in xrange(0, len(serial), 2):
name += chr(int(serial[i:i+2], 16) ^ (16 * (i / 2 % 3 + 1))) print name

reversing.kr easykeygen 之wp的更多相关文章

  1. [Reversing.kr] Easy Crack Writeup

    题目:http://reversing.kr/ Easy Crack IDA打开.分析可知Sub_401080是关键函数.F5后. 当满足 则跳转成功.拼接后得到flag flag: Ea5yR3ve ...

  2. reversing.kr replace 之write up

    好似reversing除了前几个容易些,后面的都很难的.看wp都很困难.首先wp提示crtl+n查看程序所有函数,并且找到了测试函数: 补充: GetDlgItemInt函数通过发送控件WM_GETT ...

  3. reversing.kr easy crack 之write up

    之前学逆向感觉学得一踏糊涂,这阶段好多师傅带我,一定要好好学,重新开始,认真学习. 来看打开可执行文件: 用ollydbg载入,单步执行后停到了入口点: 分析入口点,并没有加壳,于是F9执行程序,跳出 ...

  4. [Reversing.kr] Easy ELF Writeup

    IDA打开,看到main()函数,当sub_8048451() 返回1 是flag正确. 跟踪函数. 脚本: #!usr/bin/env python #!coding=utf-8 __author_ ...

  5. [Reversing.kr] Easy_KeygenMe Writeup

    IDA打开.Main()函数就是关键算法 v6,v7,v8 是连续的 .可看成 L=[16,32,48].输入的name每位分别于L[]异或 得到的值存在v13.然后清空v9的值 ,输入Serial储 ...

  6. pwnable.kr uaf之wp

    几乎都想要放弃了,感觉学了好久还是什么都不会,这个题好像很难的样子,有很多知识点需要补充一下: 1.[UAF]分配的内存释放后,指针没有因为内存释放而变为NULL,而是继续指向已经释放的内存.攻击者可 ...

  7. 【练习】reserving.kr之easy ELF

    打开主函数: int __cdecl main() { int result; // eax@2 write(, "Reversing.Kr Easy ELF\n\n", 0x17 ...

  8. 网络安全学习和CTF必不可少的一些网站

    [转载备用] 原文地址  http://blog.csdn.net/ida0918/article/details/52730662 http://www.sec-wiki.com/skill/ 安全 ...

  9. 【转】个人总结-网络安全学习和CTF必不可少的一些网站

    转自:http://blog.csdn.net/ida0918/article/details/52730662 学习的地方很多,不能一一列举,一些优秀的网址和博客可能也没有提到,大家补充吧:P就简单 ...

随机推荐

  1. oracle 表空间及查看所有用户的表空间

    用户有默认表空间,但是只能指定一个,但是你有其它表空间的限额的话,可以将表建到其它表空间中. 语法 create table xxx(xxxx xx) tablespace xxxxx 1.查看当前用 ...

  2. UvaLive6439(string使用、回文串)

    样例手写一写很容易发现规律(前后一样的串,则ans+=2),实现起来却忘了string的便捷性,其实根本用不到哈希. ; int n, ans; string s, t1, t2; int main( ...

  3. April Fools Contest 2017 F

    Description You are developing a new feature for the website which sells airline tickets: being able ...

  4. Oracle JDK各版本下载地址记录

    Oracle JDK各版本下载地址: https://www.oracle.com/technetwork/java/javase/archive-139210.html

  5. 18.3.2从Class上获取信息(属性)

    package d18_3_1; import java.lang.reflect.Field; import java.util.Arrays; /** * 获取Class对应类所包含的属性的四个方 ...

  6. C8051特点

    C8051与传统51的区别在于优先权交叉开关.系统时钟.SFR寄存器几个方面: 一 优先权交叉开关:传统的51外设功能是固定分配或者复用分配到指定引脚,而C8051则是通过优先权交叉开关设置,即要想分 ...

  7. [在读]javascript框架设计

    司徒正美的书,内容我觉得不错,国内的书很少会讲这些.当然也有很多人吐槽它只贴代码没有解释,文笔不够优美啥啥的,我想说,不要在意这些细节,反正是值得买的一本.

  8. solr facet查询及solrj 读取facet数据[转]

    solr facet查询及solrj 读取facet数据 | 所属分类:solr facet solrj 一.   Facet 简介 Facet 是 solr 的高级搜索功能之一 , 可以给用户提供更 ...

  9. Apache Kylin Cube 的构建过程

    不多说,直接上干货! 1. Cube的物理模型 Cube物理模型 如上图所示,一个常用的3维立方体,包含:时间.地点.产品.假如data cell 中存放的是产量,则我们可以根据时间.地点.产品来确定 ...

  10. Centos系统安装 phpredis 扩展

    Git地址:https://github.com/nicolasff/phpredis 一.安装: phpize ./configure make && make install 其中 ...