• 标 题:破解红外遥控编码分析仪3.0——上次问过的,现在终于破了。 (6千字)
  • 作 者:Passion
  • 时 间:2001-2-16 10:43:57
  • 链 接:http://bbs.pediy.com

破解红外遥控编码分析仪3.0
Passion

前不久一同学使用红外遥控编码分析仪3.0,说是未注册版本仅仅可输出红外线接口数据3次(3次的确也太少了点),于是找我碰碰运气看能不能破。我瞧这软件说明,说要向作者付“一吨午饭”注册,天啊!要勒紧裤带少吃多少顿才能凑足这一吨?“民以食为天”,破吧!
这个东西加了壳,由于我脱壳经验不足,在这里耽搁了两天。Fileinfo查不出是什么壳,后来下了个GTW,说是ASPack 1.083,于是用PROCDUMP的unpack,脱出来的文件却不能运行,出什么EAccessVoilation。找个专门脱它的工具,照样非法操作。看来只有手工脱了。还好,我们有中国人值得骄傲的TRW2000。
找入口点找得我头晕,(此处省略不成功脱壳过程XXXX次)。后来终于碰上了一个段转换的RET,执行完RET后来到以下处:

A1BCA34800              mov eax, dword ptr [0048A3BC]        ;这条居然是入口!不是PUSH EBP?
C1E002                  shl eax, 02
A3C0A34800              mov dword ptr [0048A3C0], eax
57                      push edi
51                      push ecx

在MOV EAX, dword ptr [0048A3BC]处来个PEDUMP,嘿嘿,脱壳成功。

接着便是破注册的过程了。程序运行时会生成一个本机号,估计是把电脑的各种参数都计算出来凑成一块儿的。算法复杂得很。——先试试再说。运行程序IRVIEWER.EXE,啪地出来个窗口告诉你没注册,还把本机号多少多少多少告诉你。按确定后点菜单中的注册出现注册输入框。随便乱填后按确定,窗体先消失,然后告诉你错误。没的说,跟吧。下断 bpx hmemcpy,断后pmodule,清断点按F10跟踪,在IRVIEWER和COMCTL32.DLL和kernerl、user等之间跳了几次后终于来到以下处:

:00402A7A 8B0D50354900            mov ecx, dword ptr [00493550]
:00402A80 8B01                    mov eax, dword ptr [ecx]
:00402A82 8B80E8020000            mov eax, dword ptr [eax+000002E8]
:00402A88 E80B210400              call 00444B98
:00402A8D 8D45FC                  lea eax, dword ptr [ebp-04]
:00402A90 E8DB360000              call 00406170
:00402A95 50                      push eax
:00402A96 E8212F0000              call 004059BC                ;这里验证注册码是否正确。
:00402A9B 59                      pop ecx
:00402A9C 3B0548BD4900            cmp eax, dword ptr [0049BD48]        ;正确标志
:00402AA2 0F95C2                  setne dl                ;对则DL为0,否则……
:00402AA5 83E201                  and edx, 00000001            ;否则为1
:00402AA8 52                      push edx
:00402AA9 FF4DD4                  dec [ebp-2C]
:00402AAC 8D45FC                  lea eax, dword ptr [ebp-04]
:00402AAF BA02000000              mov edx, 00000002
:00402AB4 E8E3600800              call 00488B9C
:00402AB9 59                      pop ecx
:00402ABA 84C9                    test cl, cl
:00402ABC 7429                    je 00402AE7                ;这里不跳则出错。
:00402ABE 6A00                    push 00000000

但如果改00402ABC处的JE,居然无效。只有改00402AA2处了。把setne dl和AND EDX,00000001改成MOV EDX,0和NOP即可。
也就是把
0F 95 C2 83 E2 01 52
改为:
BA 00 00 00 00 90 ..

改掉脱壳后的EXE文件后再运行,选菜单中的注册,在注册框中乱填一气,按确定。……嗯?什么都没有?
那这样算不算注册成功?关闭程序再运行,仍然提示未注册。看来不行。
不过注意到一点,乱填一气的注册码在程序再度运行后在注册框中仍然存在,看来注册这一步应该是通过了,但程序启动的时候还有一步检验的过程,那儿通不过,就得每次运行程序都得注册一次了。
用FILEmonitor和regmonitor监视程序运行中注册表和文件的变化,终于从千头万绪中看到了C:\WINDOWS\IRVIEW.INI文件。注册框的检验通过后关闭程序时会把“正确”的注册码写入C:\WINDOWS\IRVIEW.INI文件。其内容为:

[Register]
SerialNum=0987654321

这样就需要跟踪程序开始读文件的部分。我于是就用TRW2000来LOAD它,下断Createfilea也好,下getprivateprofilestring也好,下getprivateprofileint也好,下readfile也好,下openfile和其ex也好,居然要么是什么都拦不住(这是什么原因还请各位指点),要么就是在弹出提示未注册框后中断。我几乎觉得山穷水尽了。后来仔细想想又找到了法子。——程序不是会把这个“正确”的注册码读进来吗?我就查它就行了。
在弹出注册框时按Ctrl+M切入TRW2000,s 0 ffffffff '0987654321',真的找到一个地址47B490。
退出程序重新load,下bpm 47b490 w,后来中断几次,看看哪次47b490处会出现0987654321。
哈哈,这里!——这里中断已经离目标不远了。
(据REGMON分析,程序是先读许多注册表参数再读的IRVIEW.INI文件,也就是说很可能本机号的计算在注册码的读出之前处理,可以跳过许多麻烦的算法程序了。)

不多久来到此处:

:0040325B E80C270000              call 0040596C
:00403260 A348BD4900              mov dword ptr [0049BD48], eax
:00403265 B850BD4900              mov eax, 0049BD50
:0040326A E8012F0000              call 00406170
:0040326F 50                      push eax
:00403270 E847270000              call 004059BC                ;这里是验证过程
:00403275 59                      pop ecx
:00403276 3B0548BD4900            cmp eax, dword ptr [0049BD48]        ;这里是关键比对
:0040327C 0F849E000000            je 00403320                ;正确则跳,否则出错。
:00403282 66C7459C5000            mov [ebp-64], 0050
:00403288 8D45D0                  lea eax, dword ptr [ebp-30]
:0040328B E8B02E0000              call 00406140
:00403290 8BD0                    mov edx, eax
:00403292 FF45A8                  inc [ebp-58]
:00403295 A148BD4900              mov eax, dword ptr [0049BD48]
:0040329A E89D2F0000              call 0040623C
:0040329F 8D55D0                  lea edx, dword ptr [ebp-30]
:004032A2 52                      push edx
:004032A3 8D45CC                  lea eax, dword ptr [ebp-34]
:004032A6 E8952E0000              call 00406140
:004032AB 50                      push eax
:004032AC FF45A8                  inc [ebp-58]

* Possible StringData Ref from Data Obj ->"该软件没有注册,请向作者注册.
注册号: "
                                  |
:004032AF BA01A84800              mov edx, 0048A801
    …………  ;下边就省了。
    
很好。把je 00403320改成JMP 00403320就行。
也就是做以下修改:
0F 84 9E 00 00 00 66 C7
E9 9F 00 .. .. 90 .. ..

保存文件后运行,万事大吉!——实际上只改此处就行。

这个软件在华军上的软件分类中的“其他栏目”中有下载,不是列表中的第一个地址!那是错的,虽然也是一个IR.EXE,却是什么InternetRadio。 ^_^
这个东西如果用静态分析查找字串引用的方法来破可能还会简单得多,我没这样做,因为……还不熟,找注册码就更没本事了。嘿嘿!

后记:
本文在打字过程中完成50%左右时正待保存,却出来个保存错误,然后Uedit32被中止,我差点气晕,赶忙启动TRW2000,查找内存中的"IRVIEW.INI",结果万幸,找到了我这可怜的半篇文章。但VMM模式下不可写盘,我于是下个BPX HMEMCPY,暂时退出,随便在那个程序的框中敲一字符,断时就脱离VMM模式了,来个w,好,总算没浪费力气。
——Passion写于情人节后两天。

  • 标 题:红外遥控编码分析仪3.0 (985字)
  • 作 者:111222
  • 时 间:2001-2-20 17:29:34

取本机号,换成十六进制,然后从低位到高位每次取两位十六进制,
依次按一定算法(下面)变换成8位或9位二进制数,再把这些二进制数从高位
到低位排列(个数为8的倍数,不足的在后面随便补上0或1),将排列后
的二进制写成十六进制数。再将十六进制数两位两位交换位置(1位与2位,
3位与4位,5位与6位,7位与8位,...)。这样就得到注册码。
算法:
  如两位十六进制xy大于或等于74(十六进制),则(xy-74)换成二进制为所求8位
二进制。
例 d7-->01100011
  (十六进制)d7-74=63  63(十六进制)=01100011(二进制)
  如两位十六进制xy小于74(十六进制),则变换成9位二进制。xy除于2,余数为
第九位二进制数,商加上c6(十六进制)后再换成二进制为所求前8位二进制数。
例 11 --> 110011101
            8 位+1 位
  (十六进制)11=8*2+1    8+c6=ce  ce(十六进制)=11001110(二进制)

比如:本机号53547479 --> 033111d7(十六进制)
d7 --> 01100011
11 --> 110011101
31 --> 110111101
03 --> 110001111
  0110 0011 1100 1110 1110 1111 0111 0001 1110 0000  最后随便补5个0
    6    3    c    e    e    f    7    1    e    0
注册码 36ecfe170e

  • 标 题:总补充说明 (6千字)
  • 作 者:111222
  • 时 间:2001-2-21 19:37:57

我知道了为什么 call 00401fa4会修改表格,经过分析,其实他修改表格是保存结果的,不会影响以后运算。请看下面分析:

0030:0049B85C 73 02 74 02 75 02 76 02-77 02 78 02 79 02 7A 02 s.t.u.v.w.x.y.z.
0030:0049B86C 7B 02 7C 02 7D 02 7E 02-7F 02 80 02 81 02 82 02 {.|.}.~...??
0030:0049B87C 83 02 84 02 85 02 86 02-87 02 88 02 89 02 8A 02 ????????
0030:0049B88C 8B 02 8C 02 8D 02 8E 02-8F 02 90 02 91 02 92 02 ????????
0030:0049B89C 93 02 94 02 95 02 96 02-97 02 98 02 99 02 9A 02 ????????
0030:0049B8AC 9B 02 9C 02 9D 02 9E 02-9F 02 A0 02 A1 02 A2 02 ????????
0030:0049B8BC A3 02 A4 02 A5 02 A6 02-A7 02 A8 02 A9 02 AA 02 ????????
0030:0049B8CC AB 02 AC 02 AD 02 AE 02-AF 02 B0 02 B1 02 B2 02 ????????
0030:0049B8DC B3 02 B4 02 B5 02 B6 02-B7 02 B8 02 B9 02 BA 02 ????????
0030:0049B8EC BB 02 BC 02 BD 02 BE 02-BF 02 C0 02 C1 02 C2 02 ????????
0030:0049B8FC C3 02 C4 02 C5 02 C6 02-C7 02 C8 02 C9 02 CA 02 ????????
0030:0049B90C CB 02 CC 02 CD 02 CE 02-CF 02 D0 02 D1 02 D2 02 ????????
0030:0049B91C D3 02 D4 02 D5 02 D6 02-D7 02 D8 02 D9 02 DA 02 ????????
0030:0049B92C DB 02 DC 02 DD 02 DE 02-DF 02 E0 02 E1 02 E2 02 ????????
0030:0049B93C E3 02 E4 02 E5 02 E6 02-E7 02 E8 02 E9 02 EA 02 ????????
0030:0049B94C EB 02 EC 02 ED 02 EE 02-EF 02 F0 02 F1 02 F2 02 ????????
0030:0049B95C F3 02 F4 02 F5 02 F6 02-F7 02 F8 02 F9 02 FA 02 ????????
0030:0049B96C FB 02 FC 02 FD 02 FE 02-FF 02 00 03 01 03 02 03 ????.......
0030:0049B97C 03 03 04 03 05 03 06 03-07 03 08 03 09 03 0A 03 ................
0030:0049B98C 0B 03 0C 03 0D 03 0E 03-0F 03 10 03 11 03 12 03 ................
0030:0049B99C 13 03 14 03 15 03 16 03-17 03 18 03 19 03 1A 03 ................
0030:0049B9AC 1B 03 1C 03 1D 03 1E 03-1F 03 20 03 21 03 22 03 .......... .!.".
0030:0049B9BC 23 03 24 03 25 03 26 03-27 03 28 03 29 03 2A 03 #.$.%.&.'.(.).*.
0030:0049B9CC 2B 03 2C 03 2D 03 2E 03-2F 03 30 03 31 03 32 03 +.,.-.../.0.1.2.
0030:0049B9DC 33 03 34 03 35 03 36 03-37 03 38 03 39 03 3A 03 3.4.5.6.7.8.9.:.
0030:0049B9EC 3B 03 3C 03 3D 03 3E 03-3F 03 40 03 41 03 42 03 ;.<.=.>.?.@.A.B.
0030:0049B9FC 43 03 44 03 45 03 46 03-47 03 48 03 49 03 4A 03 C.D.E.F.G.H.I.J.
0030:0049BA0C 4B 03 4C 03 4D 03 4E 03-4F 03 50 03 51 03 52 03 K.L.M.N.O.P.Q.R.
0030:0049BA1C 53 03 54 03 55 03 56 03-57 03 58 03 59 03 5A 03 S.T.U.V.W.X.Y.Z.
0030:0049BA2C 5B 03 5C 03 5D 03 5E 03-5F 03 60 03 61 03 62 03 [.\.].^._.`.a.b.
0030:0049BA3C 63 03 64 03 65 03 66 03-67 03 68 03 69 03 6A 03 c.d.e.f.g.h.i.j.
0030:0049BA4C 6B 03 6C 03 6D 03 6E 03-6F 03 70 03 71 03 72 03 k.l.m.n.o.p.q.r.
0030:0049BA5C 73 03 74 03 75 03 76 03-77 03 78 03 79 03 7A 03 s.t.u.v.w.x.y.z.
0030:0049BA6C 7B 03 7C 03 7D 03 7E 03-7F 03 80 03 81 03 82 03 {.|.}.~...??
0030:0049BA7C 83 03 84 03 85 03 86 03-87 03 88 03 89 03 8A 03 ????????
0030:0049BA8C 8B 03 8C 03 8D 03 8E 03-8F 03 90 03 91 03 92 03 ????????
0030:0049BA9C 93 03 94 03 95 03 96 03-97 03 98 03 99 03 9A 03 ????????
0030:0049BAAC 9B 03 9C 03 9D 03 9E 03-9F 03 A0 03 A1 03 A2 03 ????????
0030:0049BABC A3 03 A4 03 A5 03 A6 03-A7 03 A8 03 A9 03 AA 03 ????????
0030:0049BACC AB 03 AC 03 00 00 02 00-04 00 06 00 08 00 0A 00 ??............
0030:0049BADC 0C 00 0E 00 10 00 12 00-14 00 16 00 18 00 1A 00 ................
0030:0049BAEC 1C 00 1E 00 20 00 22 00-24 00 26 00 28 00 2A 00 .... .".$.&.(.*.
0030:0049BAFC 2C 00 2E 00 30 00 32 00-34 00 36 00 38 00 3A 00 ,...0.2.4.6.8.:.
0030:0049BB0C 3C 00 3E 00 40 00 42 00-44 00 46 00 48 00 4A 00 <.>.@.B.D.F.H.J.
0030:0049BB1C 4C 00 4E 00 50 00 52 00-54 00 56 00 58 00 5A 00 L.N.P.R.T.V.X.Z.
0030:0049BB2C 5C 00 5E 00 60 00 62 00-64 00 66 00 68 00 6A 00 \.^.`.b.d.f.h.j.
0030:0049BB3C 6C 00 6E 00 70 00 72 00-74 00 76 00 78 00 7A 00 l.n.p.r.t.v.x.z.
0030:0049BB4C 7C 00 7E 00 80 00 82 00-84 00 86 00 88 00 8A 00 |.~..?????
0030:0049BB5C 8C 00 8E 00 90 00 92 00-94 00 96 00 98 00 9A 00 ????????
0030:0049BB6C 9C 00 9E 00 A0 00 A2 00-A4 00 A6 00 A8 00 AA 00 ????????
0030:0049BB7C AC 00 AE 00 B0 00 B2 00-B4 00 B6 00 B8 00 BA 00 ????????
0030:0049BB8C BC 00 BE 00 C0 00 C2 00-C4 00 C6 00 C8 00 CA 00 ????????
0030:0049BB9C CC 00 CE 00 D0 00 D2 00-D4 00 D6 00 D8 00 DA 00 ????????
0030:0049BBAC DC 00 DE 00 E0 00 E2 00-E4 00 E6 00 E8 00 EA 00 ????????
0030:0049BBBC EC 00 EE 00 F0 00 F2 00-F4 00 F6 00 F8 00 FA 00 ????????
0030:0049BBCC FC 00 FE 00 00 01 02 01-04 01 06 01 08 01 0A 01 ??............
0030:0049BBDC 0C 01 0E 01 10 01 12 01-14 01 16 01 18 01 1A 01 ................
0030:0049BBEC 1C 01 1E 01 20 01 22 01-24 01 26 01 28 01 2A 01 .... .".$.&.(.*.
0030:0049BBFC 2C 01 2E 01 30 01 32 01-34 01 36 01 38 01 3A 01 ,...0.2.4.6.8.:.
0030:0049BC0C 3C 01 3E 01 40 01 42 01-44 01 46 01 48 01 4A 01 <.>.@.B.D.F.H.J.
0030:0049BC1C 4C 01 4E 01 50 01 52 01-54 01 56 01 58 01 5A 01 L.N.P.R.T.V.X.Z.
0030:0049BC2C 5C 01 5E 01 60 01 62 01-64 01 66 01 68 01 6A 01 \.^.`.b.d.f.h.j.
0030:0049BC3C 6C 01 6E 01 70 01 72 01-74 01 76 01 78 01 7A 01 l.n.p.r.t.v.x.z.
0030:0049BC4C 7C 01 7E 01 80 01 82 01-84 01 86 01 88 01 8A 01 |.~..?????
0030:0049BC5C 8C 01 8E 01 90 01 92 01-94 01 96 01 98 01 9A 01 ????????
0030:0049BC6C 9C 01 9E 01 A0 01 A2 01-A4 01 A6 01 A8 01 AA 01 ????????
0030:0049BC7C AC 01 AE 01 B0 01 B2 01-B4 01 B6 01 B8 01 BA 01 ????????
0030:0049BC8C BC 01 BE 01 C0 01 C2 01-C4 01 C6 01 C8 01 CA 01 ????????
0030:0049BC9C CC 01 CE 01 D0 01 D2 01-D4 01 D6 01 D8 01 DA 01 ????????
0030:0049BCAC DC 01 DE 01 E0 01 E2 01-E4 01 E6 01 E8 01 EA 01 ????????
0030:0049BCBC EC 01 EE 01 F0 01 F2 01-F4 01 F6 01 F8 01 FA 01 ????????
0030:0049BCCC FC 01 FE 01 00 02 02 02-04 02 06 02 08 02 0A 02 ??............
0030:0049BCDC 0C 02 0E 02 10 02 12 02-14 02 16 02 18 02 1A 02 ................
0030:0049BCEC 1C 02 1E 02 20 02 22 02-24 02 26 02 28 02 2A 02 .... .".$.&.(.*.
0030:0049BCFC 2C 02 2E 02 30 02 32 02-34 02 36 02 38 02 3A 02 ,...0.2.4.6.8.:.
0030:0049BD0C 3C 02 3E 02 40 02 42 02-44 02 46 02 48 02 4A 02 <.>.@.B.D.F.H.J.
0030:0049BD1C 4C 02 4E 02 50 02 52 02-54 02 56 02 58 02 5A 02 L.N.P.R.T.V.X.Z.
0030:0049BD2C 5C 02 5E 02 60 02 62 02-64 02 66 02 68 02 6A 02 \.^.`.b.d.f.h.j.
0030:0049BD3C 6C 02 6E 02 70 02

从上面表格可看,查表是0-->0x273    1-->0x274  ... 0x139-->3ac (这里都是加上0x273),13a-->0  13b-->2 (直到表格完 右边=(左边-13a)*2 ) 。这是我看完整张表后总结的,好累啊!!!
经过几次查表后得到结果,(哈哈,经1212兄提醒,分析了call的表格变化规律是从139,138,137...分别与结果在表中的位置替换数据以达到保存计算结果的目的,而这些位置139...在计算过程是不会用到的)。真没想到居然用这种方法保存结果!!
最后就是取出结果与本机号比较,相同则ok。运算过程没有直接给出注册码,所以必须求逆过程,就是我上次所发表的那个,呵呵。