变压器设计大师2.0破解实录-----一个易语言程序破解 [软件介绍] 变压器是常用的一种器件,本软件可以帮助您快速的计算出变压器的各项参数。
同时还附带大量的资料以便您在设计变压器时查询。
与同类软件相比具有许多优点:
1、支持初级绕组多种输入电压。
2、支持次级绕组多绕组、多种电压输出。
3、支持多种整流方式输出。
4、软件计算线圈匝数时自动加入负载压降、整流压降等。
5、附带大量常用数据资料,方便用户查询。
注册费用为:人民币 280.00元 [保护方式] 采用硬件序列号,一机注册码
[下载]http://www1.skycn.com/soft/21536.html 破解工具: PEID0.91汉化版,OLLYDBG1.10
破解过程:
1.用peid侦查信息为: "没有发现!".
不回有壳吧??.
先不管啦,用OD载入看一下,
00401000 >/$ E8 06000000 CALL 变压器设.0040100B
00401005 |. 50 PUSH EAX ; /ExitCode
00401006 \. E8 BB010000 CALL <JMP.&KERNEL32.ExitProcess> ; \ExitProcess
0040100B /$ 55 PUSH EBP
0040100C |. 8BEC MOV EBP,ESP
0040100E |. 81C4 F0FEFFFF ADD ESP,-110
00401014 |. E9 83000000 JMP 变压器设.0040109C
00401019 |. 6B 72 6E 6C 6E>ASCII "krnln.fnr",0
00401023 |. 6B 72 6E 6C 6E>ASCII "krnln.fne",0
0040102D |. 47 65 74 4E 65>ASCII "GetNewSock",0
00401038 |. 53 6F 66 74 77>ASCII "Software\FlySky\"
00401048 |. 45 5C 49 6E 73>ASCII "E\Install",0
00401052 |. 50 61 74 68 00>ASCII "Path",0
00401057 |. 4E 6F 74 20 66>ASCII "Not found the ke"
00401067 |. 72 6E 65 6C 20>ASCII "rnel library or "
00401077 |. 74 68 65 20 6B>ASCII "the kernel libra"
00401087 |. 72 79 20 69 73>ASCII "ry is invalid!",0
00401096 |. 45 72 72 6F 72>ASCII "Error",0
我首先发现如下字符串"krnln.fnr",由于以前破过易语言的程序,知道"krnln.fnr"是
易语言的支持库,所以肯定这个程序是由易语言编的.
2.按F9运行程序,点击出注册界面后, 我的注册信息如下:
硬件代码:166385371.9427
填入注册信息,
注册名: crackerwu
注册码: 54321
点"注册"后,程序提示信息为 "请重新启动本软件,谢谢您的使用"
看来程序在启动时比较注册码.
3.由于还不知道注册信息保存在什么地方(注册表或某个文件中),我首先想到
用GetWindowtextA函数设断跟踪来看一下注册信息保存位置.
设断后很快发现程序其它地方在不断使用这个函数(不断的被中断),根本就没法去点击注册按钮.
看来需要转变思路想想其它办法.
4.我忽然想到还没有仔细看过它的安装目录下有些什么文件,去看看再说.
找到一个文件"peizhi.ini"内容如下:
__________________________________________
[zhuce]
注册=54321
姓名=crackerwu
类型=0
邮件=
邮编=
电话=
传真=
地址=
___________________________________________
哈哈,注册信息保存在这里,太好了!!!!
5. WINDOWS专门提供了一组函数用来读写INI文件:
GetPrivateProfileString
GetPrivateProfileInt
WritePrivateProfileString
WritePrivateProfileInt 下面对GetPrivateProfileStringA函数设断来跟踪,
用OLLYDBG加载程序后, ALT+E选择到KERNEL32.dll模块,按右键,
选择“View Names” 出现调用函数的窗口,
向下拉动找到GetPrivateProfileStringA并选择它,按下F2。
按F9执行,回到主程序,添入注册名和注册码注册,被OllyDbg拦截住,
按CTRL+F9,按F8来到krnln.fnr中,
再按CTRL+F9,F8返回程序领空后来到如下位置: 00494C79 55 PUSH EBP
00494C7A 8BEC MOV EBP,ESP
00494C7C 81EC 2C000000 SUB ESP,2C
00494C82 C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0
00494C89 C745 F8 00000000 MOV DWORD PTR SS:[EBP-8],0
00494C90 C745 F4 00000000 MOV DWORD PTR SS:[EBP-C],0
00494C97 68 00000000 PUSH 0
00494C9C BB 04010000 MOV EBX,104
00494CA1 E8 D48B0000 CALL 变压器设.0049D87A
00494CA6 83C4 04 ADD ESP,4
00494CA9 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
00494CAC 68 FF324000 PUSH 变压器设.004032FF ; ASCII "\peizhi.ini"
00494CB1 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
00494CB4 B9 02000000 MOV ECX,2
00494CB9 E8 36CBFFFF CALL 变压器设.004917F4
00494CBE 83C4 08 ADD ESP,8
00494CC1 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
00494CC4 8B5D F0 MOV EBX,DWORD PTR SS:[EBP-10]
00494CC7 85DB TEST EBX,EBX
00494CC9 74 09 JE SHORT 变压器设.00494CD4
00494CCB 53 PUSH EBX
00494CCC E8 AF8B0000 CALL 变压器设.0049D880
00494CD1 83C4 04 ADD ESP,4
00494CD4 6A 00 PUSH 0
00494CD6 6A 00 PUSH 0
00494CD8 6A 00 PUSH 0
00494CDA 68 04000080 PUSH 80000004
00494CDF 6A 00 PUSH 0
00494CE1 68 0B334000 PUSH 变压器设.0040330B
00494CE6 68 04000080 PUSH 80000004
00494CEB 6A 00 PUSH 0
00494CED 68 10334000 PUSH 变压器设.00403310 ; ASCII "zhuce"
00494CF2 68 04000080 PUSH 80000004
00494CF7 6A 00 PUSH 0
00494CF9 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00494CFC 85C0 TEST EAX,EAX
00494CFE 75 05 JNZ SHORT 变压器设.00494D05
00494D00 B8 2E324000 MOV EAX,变压器设.0040322E
00494D05 50 PUSH EAX
00494D06 68 04000000 PUSH 4
00494D0B BB C8080000 MOV EBX,8C8
00494D10 E8 658B0000 CALL 变压器设.0049D87A
00494D15 83C4 34 ADD ESP,34
00494D18 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00494D1B 8B5D EC MOV EBX,DWORD PTR SS:[EBP-14]
00494D1E 85DB TEST EBX,EBX
00494D20 74 09 JE SHORT 变压器设.00494D2B
00494D22 53 PUSH EBX
00494D23 E8 588B0000 CALL 变压器设.0049D880
00494D28 83C4 04 ADD ESP,4
00494D2B 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
00494D2E 85DB TEST EBX,EBX
00494D30 74 09 JE SHORT 变压器设.00494D3B
00494D32 53 PUSH EBX
00494D33 E8 488B0000 CALL 变压器设.0049D880
00494D38 83C4 04 ADD ESP,4
00494D3B 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
00494D3E 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00494D41 68 00000000 PUSH 0
00494D46 BB C4060000 MOV EBX,6C4
00494D4B E8 2A8B0000 CALL 变压器设.0049D87A ; 调用易语言库函数根据硬盘型号产生一个数
;(我的为十六进制50549935)
00494D50 83C4 04 ADD ESP,4
00494D53 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX ;硬件数送[EBP-18]
00494D56 DB45 E8 FILD DWORD PTR SS:[EBP-18] ;[EBP-18]装入浮点寄存器(我的为1347721525.0000000000)
00494D59 DD5D E8 FSTP QWORD PTR SS:[EBP-18] ;
00494D5C DD45 E8 FLD QWORD PTR SS:[EBP-18]
00494D5F DC0D 16334000 FMUL QWORD PTR DS:[403316] ; 与0.1234567890000000作浮点乘法运算产生机器码
00494D65 DD5D E0 FSTP QWORD PTR SS:[EBP-20] ;结果存入[EBP-20](我的166385371.9426832)
00494D68 DD45 E0 FLD QWORD PTR SS:[EBP-20] ; [EBP-20]装入浮点寄存器
00494D6B E8 E0CAFFFF CALL 变压器设.00491850 ; 对浮取整取整call ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^跟进00491850
00491850 55 PUSH EBP
00491851 8BEC MOV EBP,ESP
00491853 83C4 F4 ADD ESP,-0C
00491856 D97D FE FSTCW WORD PTR SS:[EBP-2]
00491859 66:8B45 FE MOV AX,WORD PTR SS:[EBP-2]
0049185D 80CC 0C OR AH,0C
00491860 66:8945 FC MOV WORD PTR SS:[EBP-4],AX
00491864 D96D FC FLDCW WORD PTR SS:[EBP-4]
00491867 DF7D F4 FISTP QWORD PTR SS:[EBP-C] ;以整数保存我的166385371.9426832。
0049186A D96D FE FLDCW WORD PTR SS:[EBP-2]
0049186D 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00491870 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
00491873 8BE5 MOV ESP,EBP
00491875 5D POP EBP
00491876 C3 RETN
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00494D70 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00494D73 68 01030080 PUSH 80000301
00494D78 6A 00 PUSH 0
00494D7A FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; [EBP-8]机器码整数部份入栈
00494D7D 68 01000000 PUSH 1 ; 1为参与运算参数个数
00494D82 BB C0000000 MOV EBX,0C0 ; EBX=0C0 ,代表求反
00494D87 E8 EE8A0000 CALL 变压器设.0049D87A ; 跟进可知调用易语言库函数(对[EBP-8]作求反运算)
00494D8C 83C4 10 ADD ESP,10
00494D8F 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
00494D92 68 01030080 PUSH 80000301
00494D97 6A 00 PUSH 0
00494D99 68 75A9B33F PUSH 3FB3A975
00494D9E 68 01030080 PUSH 80000301
00494DA3 6A 00 PUSH 0
00494DA5 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
00494DA8 68 02000000 PUSH 2 ; 2为参与运算参数个数
00494DAD BB C4000000 MOV EBX,0C4 ; EBX=0C4,代表作与运算
00494DB2 E8 C38A0000 CALL 变压器设.0049D87A ; 跟进可知调用易语言库函数(对[EBP-10]与3FB3A975作与运算)
00494DB7 83C4 1C ADD ESP,1C
00494DBA 68 01030080 PUSH 80000301
00494DBF 6A 00 PUSH 0
00494DC1 50 PUSH EAX
00494DC2 68 01000000 PUSH 1 ; 1为参与运算参数个数
00494DC7 BB D4010000 MOV EBX,1D4 ; EBX=1D4,
00494DCC E8 A98A0000 CALL 变压器设.0049D87A ;跟进可知调用易语言库函数(EAX中十六进制数转换为字符串得注册码第一部份)
00494DD1 83C4 10 ADD ESP,10
00494DD4 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX ; 注册码第一部份地址送[EBP-18]
00494DD7 68 01030080 PUSH 80000301
00494DDC 6A 00 PUSH 0
00494DDE 68 75A9B33F PUSH 3FB3A975
00494DE3 68 01030080 PUSH 80000301
00494DE8 6A 00 PUSH 0
00494DEA FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; [EBP-8]机器码整数部份入栈
00494DED 68 02000000 PUSH 2 ; 2为参与运算参数个数
00494DF2 BB CC000000 MOV EBX,0CC ; EBX=0CC,
00494DF7 E8 7E8A0000 CALL 变压器设.0049D87A ;跟进可知调用易语言库函数(3FB3A975与[EBP-8]作异或运算)
00494DFC 83C4 1C ADD ESP,1C
00494DFF 68 01030080 PUSH 80000301
00494E04 6A 00 PUSH 0
00494E06 50 PUSH EAX
00494E07 68 01000000 PUSH 1
00494E0C BB D4010000 MOV EBX,1D4 ; EBX=1D4,表示十六进制数转换为字符串
00494E11 E8 648A0000 CALL 变压器设.0049D87A ;跟进可知调用易语言库函数(EAX中十六进制数转换为字符串得注册码第二部份)
00494E16 83C4 10 ADD ESP,10
00494E19 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX ; 注册码第二部份地址送[EBP-20]
00494E1C 68 01030080 PUSH 80000301
00494E21 6A 00 PUSH 0
00494E23 68 15CD5B07 PUSH 75BCD15
00494E28 68 01030080 PUSH 80000301
00494E2D 6A 00 PUSH 0
00494E2F FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; [EBP-8]为机器码整数部份入栈
00494E32 68 02000000 PUSH 2 ;2为参与运算参数个数
00494E37 BB C8000000 MOV EBX,0C8 ;EBX=0C8,表示作或运算
00494E3C E8 398A0000 CALL 变压器设.0049D87A ;跟进可知调用易语言库函数(75BCD15与[EBP-8]作或运算)
00494E41 83C4 1C ADD ESP,1C
00494E44 68 01030080 PUSH 80000301
00494E49 6A 00 PUSH 0
00494E4B 50 PUSH EAX
00494E4C 68 01000000 PUSH 1
00494E51 BB D4010000 MOV EBX,1D4 ; EBX=1D4,表示十六进制数转换为字符串
00494E56 E8 1F8A0000 CALL 变压器设.0049D87A ;调用易语言库函数(EAX中十六进制数转换为字符串得注册码第二部份)
00494E5B 83C4 10 ADD ESP,10
00494E5E 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX ; 注册码第三部份地址送[EBP-28]
00494E61 FF75 D8 PUSH DWORD PTR SS:[EBP-28] ;第三部份
00494E64 68 1E334000 PUSH 变压器设.0040331E
00494E69 FF75 E0 PUSH DWORD PTR SS:[EBP-20] ;第二部份
00494E6C 68 1E334000 PUSH 变压器设.0040331E
00494E71 FF75 E8 PUSH DWORD PTR SS:[EBP-18] ;第一部份
00494E74 B9 05000000 MOV ECX,5
00494E79 E8 76C9FFFF CALL 变压器设.004917F4 ; 连接三部份注册码
00494E7E 83C4 14 ADD ESP,14
00494E81 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX ; 注册码地址送[EBP-2C](我的为36112924-36597FAE-FFBDFDF)
00494E84 8B5D E8 MOV EBX,DWORD PTR SS:[EBP-18]
00494E87 85DB TEST EBX,EBX
00494E89 74 09 JE SHORT 变压器设.00494E94
00494E8B 53 PUSH EBX
00494E8C E8 EF890000 CALL 变压器设.0049D880
00494E91 83C4 04 ADD ESP,4
00494E94 8B5D E0 MOV EBX,DWORD PTR SS:[EBP-20]
00494E97 85DB TEST EBX,EBX
00494E99 74 09 JE SHORT 变压器设.00494EA4
00494E9B 53 PUSH EBX
00494E9C E8 DF890000 CALL 变压器设.0049D880
00494EA1 83C4 04 ADD ESP,4
00494EA4 8B5D D8 MOV EBX,DWORD PTR SS:[EBP-28]
00494EA7 85DB TEST EBX,EBX
00494EA9 74 09 JE SHORT 变压器设.00494EB4
00494EAB 53 PUSH EBX
00494EAC E8 CF890000 CALL 变压器设.0049D880
00494EB1 83C4 04 ADD ESP,4
00494EB4 8B5D F4 MOV EBX,DWORD PTR SS:[EBP-C]
00494EB7 85DB TEST EBX,EBX
00494EB9 74 09 JE SHORT 变压器设.00494EC4
00494EBB 53 PUSH EBX
00494EBC E8 BF890000 CALL 变压器设.0049D880
00494EC1 83C4 04 ADD ESP,4
00494EC4 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C] ; 注册码送EAX
00494EC7 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
00494ECA 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00494ECD 50 PUSH EAX ;我们输入注册码入栈(54321)
00494ECE FF75 F4 PUSH DWORD PTR SS:[EBP-C] ;程序计算注册码入栈(我的为36112924-36597FAE-FFBDFDF)
00494ED1 E8 DAC9FFFF CALL 变压器设.004918B0 ;比较注册码CALL
00494ED6 83C4 08 ADD ESP,8
00494ED9 83F8 00 CMP EAX,0 ; 比较注册码是否正确
00494EDC 0F85 0A000000 JNZ 变压器设.00494EEC
00494EE2 B8 01000000 MOV EAX,1 ; 对EAX赋值1表示已注册
00494EE7 E9 0A000000 JMP 变压器设.00494EF6
00494EEC B8 00000000 MOV EAX,0 ; 对EAX赋值0表示未注册
;爆破可把这句改为 MOV EAX,1)
00494EF1 E9 00000000 JMP 变压器设.00494EF6
00494EF6 50 PUSH EAX
00494EF7 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
00494EFA 85DB TEST EBX,EBX
00494EFC 74 09 JE SHORT 变压器设.00494F07
00494EFE 53 PUSH EBX
00494EFF E8 7C890000 CALL 变压器设.0049D880
00494F04 83C4 04 ADD ESP,4
00494F07 8B5D F4 MOV EBX,DWORD PTR SS:[EBP-C]
00494F0A 85DB TEST EBX,EBX
00494F0C 74 09 JE SHORT 变压器设.00494F17
00494F0E 53 PUSH EBX
00494F0F E8 6C890000 CALL 变压器设.0049D880
00494F14 83C4 04 ADD ESP,4
00494F17 58 POP EAX
00494F18 8BE5 MOV ESP,EBP
00494F1A 5D POP EBP
00494F1B C3 RETN
6.算法总结:(以我的为例)
? 机器码:166385371.9427
-――――――――――――――――
机器码取整得:166385371转为十六进制09EAD6DB
---------------------------------
09EAD6DB作求反运算得:F6152924
F6152924 and 3FB3A975(常数)=36112924 (十六进制) ............注册码第一部份
------------------------------------------------------------
09EAD6DB xor 3FB3A975(常数)=36597FAE (十六进制) ............注册码第二部份
------------------------------------------------------------
09EAD6DB or 75BCD15(常数) =FFBDFDF (十六进制) ............注册码第三部份
------------------------------------------------------------
上面三部份用“-”连结起来就的到了注册码: 36112924-36597FAE-FFBDFDF
7.VB注册机: Private Sub Command1_Click()
On Error Resume Next
s = Text1.Text
If s = "" Then Exit Sub
m = Fix(s)
s1 = Not (m) And &H3FB3A975
s2 = m Xor &H3FB3A975
s3 = m Or &H75BCD15
Text2.Text = Hex(s1) + "-" + Hex(s2) + "-" + Hex(s3)
End Sub
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)