前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PBKILLER的搜索

PB小助手 v3.1 - PB简单算法逆运算 - 看雪安全论坛 看雪安全论坛 > Windows > 『软件调试逆向』 PB小助手 v3.1 - PB简单算法逆运算 用户名 记住 密 码 忘记密码? KSSD 注册账号 搜索论坛 日历事件 论坛帮助 --> 『软件调试逆向』 [综合性论坛]本版讨论的主题包括:调试逆向、系统底层、商业保护、虚拟机保护、.NET平台等安全相关的话题。 转到页面... 该主题: "PB小助手 v3.1 - PB简单算法逆运算" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。 主题工具 显示模式 本站声明:看雪论坛文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者信息及本声明! killl 中级会员 资 料: 注册日期: Sep 2004 帖子: 378 精华: 10 现金: 212 Kx 资产: 212 Kx--> 致谢数: 0 获感谢文章数:0获会员感谢数:0 1 2005-10-02 11:09:00 PB小助手 v3.1 - PB简单算法逆运算 标 题: PB小助手 v3.1 - PB简单算法逆运算 作 者: killl 时 间: 2005-10-02,11:09:00 链 接: http://bbs.pediy.com/showthread.php?t=17309 PB小助手 v3.1 PB简单算法逆运算 【破文标题】PB小助手 v3.1 PB简单算法逆运算 【软件名称】PB小助手 v3.1 【软件介绍】 欢迎使用PB小助手。作为一名PB程序员,您是否有过为了查找某一语 句而不辞辛劳地打开一个又一个事件或函数,在其脚本中苦苦寻觅的痛苦经 历;而为了找到某一变量或函数的定义,您不得不在错综复杂的对象继承关 系中刨根溯源、上下求索。有了PB小助手,这些问题都将迎刃而解。它能帮 您在一大堆对象或脚本中迅速找到您想要的,快人一步,胜人一筹! 主要功能: * 对象检索。在PB应用中搜索名称中包含指定字符串的对象。 * 脚本检索。在PB应用源码中搜索指定字符串。 * 辅助注释。按自定义模板格式插入代码注释。 * 浮动窗口。工具条窗口显示,操作简单快捷。 * 代码统计。对选定的PBL库进行对象及代码行数统计。 * 代码浏览。 * 重复对象检索。 * 无用对象检索。 * 对象属性列表。 * 对象继承关系。 本软件使用PowerBuilder开发,使用时需PB运行库支持。如果您有任何 问题或好的建议,请直接与作者(cym@shareware.com.cn)联系,或访问本 软件主页http://pbfind.51.net。 【软件地址】http://pbfind.51.net 【破文作者】KiLlL[DFCG][FCG] 【破解时间】2005-10-01 11:01 【破解声明】国庆节快乐! 仅限技术交流! 【破解过程】 跟PB第一次接触以后,不小心发现另外一个PB的软件,顺手看看吧。本人是不会用PB的。 软件首先提示注册,有机器码,用户名,注册码三个参数,PBKILLER(谢谢作者~)上。 在w_about.srw文件里面发现: event clicked; if f_decry(parent.sle_serialno.text,parent.sle_userno.text) = parent.sle_macno.text then messagebox("恭喜","注册成功!") gb_register = true registryset("HKEY_LOCAL_MACHINE\Software\findit!","userno",regstring!,parent.sle_userno.text) registryset("HKEY_LOCAL_MACHINE\Software\findit!","serial",regstring!,parent.sle_serialno.text) gs_userno = parent.sle_userno.text gs_serialno = parent.sle_serialno.text parent.sle_userno.displayonly = true parent.sle_userno.backcolor = rgb(192,192,192) parent.sle_serialno.displayonly = true parent.sle_serialno.backcolor = rgb(192,192,192) visible = false close(parent) if isvalid(w_pbfind) then w_pbfind.title = w_pbfind.tag + ver + "(已注册)" end if else messagebox("对不起","您的用户名及注册码不正确!",stopsign!) end if 这个应该很清楚了,就是如果f_decry(注册码,用户名) = 机器码的话,注册成功,否则注册失败。 去看看f_decry函数吧。 在f_decry.srf文件里面发现: global function string f_decry (char as_src[],char as_key[]);char result[] integer i integer j integer li_char integer li_mod if len(as_key) <= 0 or len(as_src) <= 0 then return "" end if if len(as_key) < len(as_src) then as_key = fill(as_key,len(as_src)) end if for i = 1 to len(as_src) j = (i * i) * i + i * i + i + 1 li_char = asc(as_src[i]) - 33 - mod(j + asc(as_key[i]),94) if li_char < 0 then li_char = li_char + 94 end if if li_char < 33 then li_char = li_char + 94 end if result[i] = char(li_char) next return result end function 这个函数应该比较简单,但是用到了另外一个函数就是fill,搜索一下: Fill() 功能建立一个由指定字符串填充的指定长度的字符串。 语法Fill ( chars, n ) 参数chars:string类型,指定用于重复填充的字符串n:long类型,指定由该函数返回的字符串的长度返回值String。函数执行成功时返回n个 字符的字符串,该字符串以参数chars中的字符串重复填充而成。如果参数chars中的字符个数多于n个,那么使用chars字符串的前n个字符填充 函数返回的字符串;如果参数chars中的字符个数少于n个,那么使用chars字符串反复填充,直到返回的字符串长度达到n为止。如果任何参数 的值为NULL,Fill()函数返回NULL。 明白了,就是补足。 下面的任务就是写注册机了。算法很清楚,首先根据机器码,补足用户名,然后把f_decry逆一下,如下: Function f_encry(as_src As String, as_key As String) As String Dim i As Integer Dim j As Integer Dim li_char As Integer Dim li_mod As Integer Dim Result As String If Len(as_key) <= 0 Or Len(as_src) <= 0 Then f_encry = "" End If If Len(as_key) < Len(as_src) Then as_key = KiLlL_PB_Fill(as_key, Len(as_src)) End If For i = 1 To Len(as_src) li_char = Asc(Mid$(as_src, i, 1)) If li_char >= 33 Then li_char = li_char - 94 End If If li_char >= 0 Then li_char = li_char - 94 End If j = (i * i) * i + i * i + i + 1 li_char = li_char + 33 + KiLlL_PB_Mod(j + Asc(Mid$(as_key, i, 1)), 94) If li_char < 0 Then li_char = li_char + 94 End If If li_char < 33 Then li_char = li_char + 94 End If Result = Result & Chr$(li_char) Next f_encry = Result End Function 注意这个地方跟原来的pb代码相比做了如下改动: 1.写了自己的fill函数: Public Function KiLlL_PB_Fill(a As String, b As Integer) As String KiLlL_PB_Fill = a Do While (Len(KiLlL_PB_Fill) < b) KiLlL_PB_Fill = KiLlL_PB_Fill & a Loop KiLlL_PB_Fill = Left$(KiLlL_PB_Fill, b) End Function 2.mod函数自己写了,很简单。 3.为了方便,把数组改成了字符串。 4.在运算后再一次对ascii进行判断 If li_char < 0 Then li_char = li_char + 94 End If If li_char < 33 Then li_char = li_char + 94 End If 那就顺便看看机器码是什么吧,还是这个文件: lnvo_diskinfo = create nvo_diskinfo lstr_volume = lnvo_diskinfo.of_getvolumeinfo("c:\") ls_serialnum = string(lstr_volume.serialnum) sle_macno.text = ls_serialnum 原来是硬盘的序列号,用vb写出自己计算机器码的函数要稍微转一下,因为vb的获得的磁盘序列号容易变成负数,需要先转成hex,在用函数变 成十进制。 机器码=Hex2Dec(hex(GetSerialNumber("c:\"))) '十六进制到十进制,支持超级大数 Public Function Hex2Dec(InputData As String) As Double Dim i As Integer Dim DecOut As Double Dim Lenhex As Integer Dim HexStep As Double DecOut = 0 InputData = UCase$(InputData) Lenhex = Len(InputData) For i = 1 To Lenhex If IsNumeric(Mid$(InputData, i, 1)) Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "A" Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "B" Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "C" Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "D" Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "E" Then GoTo NumOk ElseIf Mid$(InputData, i, 1) = "F" Then GoTo NumOk Else MsgBox "Number given is not in Hex format", vbCritical Exit Function End If NumOk: Next i HexStep = 0 For i = Lenhex To 1 Step -1 HexStep = HexStep * 16 If HexStep = 0 Then HexStep = 1 End If If Mid$(InputData, i, 1) = "0" Then DecOut = DecOut + (0 * HexStep) ElseIf Mid$(InputData, i, 1) = "1" Then DecOut = DecOut + (1 * HexStep) ElseIf Mid$(InputData, i, 1) = "2" Then DecOut = DecOut + (2 * HexStep) ElseIf Mid$(InputData, i, 1) = "3" Then DecOut = DecOut + (3 * HexStep) ElseIf Mid$(InputData, i, 1) = "4" Then DecOut = DecOut + (4 * HexStep) ElseIf Mid$(InputData, i, 1) = "5" Then DecOut = DecOut + (5 * HexStep) ElseIf Mid$(InputData, i, 1) = "6" Then DecOut = DecOut + (6 * HexStep) ElseIf Mid$(InputData, i, 1) = "7" Then DecOut = DecOut + (7 * HexStep) ElseIf Mid$(InputData, i, 1) = "8" Then DecOut = DecOut + (8 * HexStep) ElseIf Mid$(InputData, i, 1) = "9" Then DecOut = DecOut + (9 * HexStep) ElseIf Mid$(InputData, i, 1) = "A" Then DecOut = DecOut + (10 * HexStep) ElseIf Mid$(InputData, i, 1) = "B" Then DecOut = DecOut + (11 * HexStep) ElseIf Mid$(InputData, i, 1) = "C" Then DecOut = DecOut + (12 * HexStep) ElseIf Mid$(InputData, i, 1) = "D" Then DecOut = DecOut + (13 * HexStep) ElseIf Mid$(InputData, i, 1) = "E" Then DecOut = DecOut + (14 * HexStep) ElseIf Mid$(InputData, i, 1) = "F" Then DecOut = DecOut + (15 * HexStep) Else MsgBox "Something is Screwed up, Wahhhhhhhhhhh", vbCritical End If Next i Hex2Dec = DecOut eds: End Function 【破解心得】 我的算法理解能力比较差,只会用一点点VB,所以,这么小的一段程序还是看了半天,算是逆的第一个PB算法吧。 [公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮! killl 查看公开信息 查找 killl 发表的帖子 查找 killl 发表的所有主题 查看 killl 发表的精华帖 pendan2001 普通会员 资 料: 注册日期: May 2004 帖子: 1,169 精华: 4 现金: 200 Kx 资产: 200 Kx--> 致谢数: 0 获感谢文章数:0获会员感谢数:0 2 2005-10-02, 11:38:52 不错! [公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮! pendan2001 查看公开信息 查找 pendan2001 发表的帖子 查找 pendan2001 发表的所有主题 查看 pendan2001 发表的精华帖 lnn1123 高级会员 资 料: 注册日期: Nov 2004 帖子: 761 精华: 13 现金: 114 Kx 资产: 114 Kx--> 致谢数: 0 获感谢文章数:0获会员感谢数:0 3 2005-10-02, 14:05:01 高产啊! [公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮! lnn1123 查看公开信息 查找 lnn1123 发表的帖子 查找 lnn1123 发表的所有主题 查看 lnn1123 发表的精华帖 冷血书生 高级会员 资 料: 注册日期: Jul 2005 帖子: 1,119 积分:23 --> 精华: 28 现金: 219 Kx 资产: 219 Kx--> 致谢数: 0 获感谢文章数:0获会员感谢数:0 4 2005-10-02, 14:22:33 强! 支持的说!! [招生]15PB软件安全培训第3期3月10日开课,看雪会员报名6折优惠(16,800元)! 冷血书生 查看公开信息 访问 冷血书生 的个人网站 查找 冷血书生 发表的帖子 查找 冷血书生 发表的所有主题 查看 冷血书生 发表的精华帖 南蛮妈妈 BAN 资 料: 注册日期: Sep 2005 帖子: 469 积分:5 --> 精华: 3 现金: 200 Kx 资产: 200 Kx--> 致谢数: 0 获感谢文章数:0获会员感谢数:0 5 2005-10-02, 15:09:05 学习了 [招生]"麦洛克菲"内核驱动开发培训3月15日开课,看雪会员报名优惠200元! 南蛮妈妈 查看公开信息 查找 南蛮妈妈 发表的帖子 查找 南蛮妈妈 发表的所有主题 查看 南蛮妈妈 发表的精华帖 添加到书签 Digg del.icio.us StumbleUpon Google 百度搜藏 QQ 书签 雅虎收藏 该主题: "PB小助手 v3.1 - PB简单算法逆运算" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。 &laquo; 上一主题 | 下一主题 &raquo; 主题工具 显示可打印版本 显示模式 平板模式 切换到混合模式 切换到树形模式 发帖规则 您不可以发表主题 您不可以回复帖子 您不可以上传附件 您不可以编辑自己的帖子 论坛论坛启用 vB 代码 论坛启用 表情图标 论坛启用 [IMG] 代码 论坛规则 论坛跳转 --> 用户控制面板 悄悄话 收藏夹 会员在线状态 搜索论坛 论坛首页 初学者园地 『求助问答』 『经典问答』 『资料导航』 Windows 『软件调试逆向』 『编程技术』 『C32Asm』 『MDebug』 『安全工具开发』 『加壳与脱壳』 『CrackMe&ReverseMe』 移动平台 『Android 开发』 『Android 安全』 『iOS安全』 『Windows Phone安全』 信息安全 『密码学』 学术会议版 『WEB安全』 『漏洞分析』 『云计算安全』 『外文翻译』 『资源下载』 职场风云 『招聘专区』 『职业生涯』 『15PB培训专区』 论坛生活 『茶余饭后』 『安全资讯』 『论坛活动』 6)PEDIY Crackme竞赛2009 7)看雪十周年专版 8)腾讯公司2010软件安全竞赛 9)2011 Exploit Me竞赛 安全图书 『图书项目版』 《加密与解密(第三版)》 《C++反汇编与逆向分析技术揭秘》 《Android软件安全与逆向分析》 『图书出版商』 『电子工业出版社』 『机械工业出版社』 站务管理 『论坛版务』 所有时间均为北京时间, 现在的时间是 00:37:00. -- VBB3 -- Wap -- 大字体 -- English -- 简体中文 -- 繁體中文 联系我们 - 看雪学院 - 文字模式 - 返回顶端 &copy;2000-2013 看雪学院(PEdiy.com) |关于我们 |京ICP备11035376号 微信公众帐号:ikanxue 手机客户端: