錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù)技術(shù)文章
[原創(chuàng)] 一款串口調(diào)試助手的序列號計(jì)算算法分析

作者: 佚名  日期:2018-05-17 06:55:12   來源: 本站整理

本次我花費(fèi)了大約兩個(gè)半小時(shí)破解了一款名為“Serial Port Utility”的軟件(又名友善串口調(diào)試助手),該軟件的串口調(diào)試功能比較強(qiáng)大,今天試著分析了一下其序列號算法,這也是我第一次做序列號分析。 注冊成功截圖如下:  
    
我們首先使用PEID對程序查殼,結(jié)果如下:
 
發(fā)現(xiàn)是一個(gè)叫做“yoda's Protector v1.02 (.dll,.ocx)-> Ashkbiz Danehkar (h) *”的殼,在網(wǎng)上查詢后得知,這個(gè)結(jié)果有可能是錯(cuò)誤的。 于是我們更換了另一個(gè)工具“ExeinfoPE”,結(jié)果如下:
 
這個(gè)軟件的結(jié)果顯示,這個(gè)程序沒有殼。

我們從軟件目錄下看到了大量Qt5開頭的動態(tài)鏈接庫,證明其軟件是用Qt5編寫的。
    
現(xiàn)在用OD加載程序,觀察ASCII字符串,我們會注意到這樣一個(gè)字符串: 
 
雙擊定位:
 
其中,經(jīng)過分析可以得知,eax保存的是Qt獨(dú)有格式的字符串(輸入的序列號字符串),并且偏移地址0x04處是字符串長度,0x0C處是前導(dǎo)說明信息塊的字節(jié)數(shù),或者說是字符串信息的偏移地址。這一段代碼說明,若序列號長度不為0x1D(即29個(gè)字符),就會報(bào)錯(cuò)。那么我們?nèi)我廨斎胍粋(gè)29字符的字符串,出現(xiàn)以下提示:
 
然后我們定位到具體字符串,結(jié)果如下:
 
雙擊定位到代碼:
 
這個(gè)代碼顯然是通過別的地方的代碼通過跳轉(zhuǎn)指令跳轉(zhuǎn)過來的(因?yàn)樯戏接幸粋(gè)jmp,順序執(zhí)行的流程直接被阻斷),我們發(fā)現(xiàn)跳轉(zhuǎn)來自004150C0:
 
je成立的條件是,al=0,而在test al,al上方是一條call語句,我們知道函數(shù)的返回值通常通過eax寄存器返回,因此可以推得,al來自于函數(shù)00439F30的返回值,我們跟進(jìn)去:
 
發(fā)現(xiàn)一條call指令,我們跟進(jìn)去:
 
可見該函數(shù)首先判斷長度是否為0x1D(地址0x4399F5處),上方Qt5Core._ZN7QString14trimmed_helperERKS_從名字上就可看出是用于去除字符串兩端空白字符的。如果長度不為0x1D,直接返回0(因?yàn)?04399F3處有一句xor eax,eax等價(jià)于mov eax,0)。我們跟著004399F8處的je來到下面:
剛開始的代碼都是一些和Qt5內(nèi)核有關(guān)的代碼,直接無視,看到下面關(guān)鍵代碼:
 
我們注意到這個(gè)循環(huán),我發(fā)現(xiàn)Qt的程序有一個(gè)風(fēng)格,就是函數(shù)傳值的時(shí)候,不使用push指令,而是直接通過mov去寫堆棧。
這段匯編代碼等價(jià)于下面的代碼:
[C++] 純文本查看 復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
*edi = 0B217808;//Qt字符串對象地址
eax = *edi;
ebx = 0;
esi = 0;
 
do
{
    edx = eax + ebx * 2;//字符串當(dāng)前字符位置地址計(jì)算
    edx += *(eax + 0xC);//加上字符串信息起始偏移地址
    ecx = 0;
    edx = (unsigned short)*edx;
    eax = (short)dl;
 
    if(dx > 0xFF)
    {
        eax = ecx;
    }
 
    ecx = *(ebp - 0x5C);
    sub_00438680(eax);
    esi += eax;//校驗(yàn)和計(jì)算
    eax = *edi;
    ebx++;
    ecx = *(eax + 4);
    edx = ecx - 2;
}while(edx > ebx)

我們看一下00438680函數(shù):
 
其中有一個(gè)jmp.&libstdc++-6._ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEcj引起了我們的注意,從名稱上我猜測是char_trait的find函數(shù),經(jīng)過百度查詢?nèi)缦拢?br/>  
詳見:https://msdn.microsoft.com/zh-cn/library/y33bd1yh.aspx
可見,這是一個(gè)字符串定位函數(shù),這個(gè)call的作用是將在一個(gè)字符串中查找某一個(gè)字符并返回該字符的索引。
那個(gè)字符串經(jīng)過研究測試是“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”。
該函數(shù)的作用:如果輸入的字符是”-”,那么直接返回0,否則返回索引。
我們回到之前調(diào)用該函數(shù)的代碼,可以發(fā)現(xiàn)計(jì)算的校驗(yàn)和就是序列號前27個(gè)字符對應(yīng)字符串中的索引之和,除了”-”符號。 我們繼續(xù)往下看:
 
作者沒有刪除代碼中的調(diào)試信息,里面提供了很多信息,這里提醒我們剛才計(jì)算的是校驗(yàn)和,我們將字符串最后兩個(gè)字符按照上面校驗(yàn)和的算法計(jì)算,發(fā)現(xiàn)這個(gè)數(shù)值和剛才的校驗(yàn)和正好相等,說明字符串最后兩個(gè)字符就是用于校驗(yàn)的。
我們往下可以看到大量的信息,這里只挑選一個(gè)字段說明:
 
其中,00439F95處的eax是字符串內(nèi)容開始偏移0x0C處(由00439F78處得到的)的文本(注意該字符串是wchar_t*類型),調(diào)用了一個(gè)函數(shù),地址位于004386B0,我們跟進(jìn)去看到如下代碼:
    
我們發(fā)現(xiàn)該函數(shù)和00438680處的函數(shù)類似,除了下面多了一條div指令以外,經(jīng)過分析可以得到,其將會將find函數(shù)的返回值對一個(gè)參數(shù)中指定的值取余數(shù)。
我們由00439F7D處的代碼,可以看到那個(gè)值是9。00439FA0處,把轉(zhuǎn)換后的值保存到了[ebp-0xB0]的位置。
右邊的說明提醒我們這個(gè)字段是”License Version”,類似的還有”Product Name”,”Product Version”,”Active Mode”,”Language”,”SoftwareType”,”Valid Period”,其中前兩個(gè)參數(shù)的轉(zhuǎn)換后的值分別保存到了[ebp-0xB4]和[ebp-0xB8]處,其它參數(shù)的值轉(zhuǎn)換完僅供調(diào)試信息輸出用。
 
我們繼續(xù)跟蹤到這里,在0043A8A8行附近,可以在右邊寄存器窗口eax處看到輸出的調(diào)試信息(作者居然忘了刪除掉調(diào)試信息輸出代碼,看的一清二楚)。
由0043A8CA到0043A8F2的代碼我們可知,只有當(dāng)”License Version”等于3,”Product Name”等于1并且”ProductVersion”不等于2,函數(shù)才會返回1表示成功。
我們?nèi)ゾW(wǎng)上搜索了一個(gè)序列號:
SA56W-UR34V-7KY76-XB31F-HZPAU 
有效期:1年 
可以看到序列號的格式類似于這樣,并且我們知道以下信息:
Calculate Sum:390
License Version:3
Product Name:1
Product Version:3
Active Mode:1
Language:1
Software Type:2
Valid Period:2
我們開始嘗試修改Software Type的值,發(fā)現(xiàn)其值等于2時(shí)表示個(gè)人版,為3時(shí)表示專業(yè)版。
然后我們嘗試修改Valid Period的值,發(fā)現(xiàn)其值等于1時(shí)表示一個(gè)月,2表示一年,3表示3年,4表示5年,5表示終生。
所以最終序列號是這樣的:11111-UR311-85111-11111-1112J
其中“UR311”以及”85”必須固定,其它的隨便寫,校驗(yàn)碼算對,這樣出來的序列號一定是專業(yè)版終生。
軟件下載鏈接:
鏈接:https://pan.baidu.com/s/1T_zvD2aUjn-xJrL5CNATVA 密碼:zyv9 
另附分析程序:
[C++] 純文本查看 復(fù)制代碼
01
56
57
58
59
60
// Serial Port Utility破解.cpp: 定義控制臺應(yīng)用程序的入口點(diǎn)。
//
 
#include "stdafx.h"
 
char *ss = (char *)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char sn[29];
 
int GetSSN(char ch)
{
char p[2];
p[1] = 0;
p[0] = ch;
return strstr(ss,p) - ss;
}
 
int sndiv(int x,int p)
{
return x % p;
}
 
 
int main()
{
char *str = (char *)"SA56W-UR34V-7KY76-XB31F-HZPAU";
 
//06 - License Version [ebp - 0xB0] = 3 /9
//07 - Product Name [ebp - 0xB4] = 1 /2
//08 - Product Version [ebp - 0xB8] != 2 /5
//09 - Active Mode /3
//0A - Language /5
//0C - Software Type /5
//0D - Valid Period /6
//char *str = (char *)"11111-UR311-81111-11111-1112F";
 
 
int i;
int sum = 0;
 
for(i = 0;i < 29;i++)
{
if(str[i] != '-')
{
sn[i] = GetSSN(str[i]);
}
else
{
sn[i] = 0;
}
}
 
for(i = 0;i < 27;i++)
{
sum += sn[i];
}
 
printf("Calculate Sum:%d\n",sum);
printf("License Version:%d\nProduct Name:%d\nProduct Version:%d\nActive Mode:%d\nLanguage:%d\nSoftware Type:%d\nValid Period:%d\n",sndiv(sn[0x06],9),sndiv(sn[0x07],2),sndiv(sn[0x08],5),sndiv(sn[0x09],3),sndiv(sn[0x0A],5),sndiv(sn[0x0C],5),sndiv(sn[0x0D],6));
return 0;
}


熱門文章
  • 機(jī)械革命S1 PRO-02 開機(jī)不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點(diǎn)不...
  • 三星一體激光打印機(jī)SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡(luò)請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機(jī)始終停留在開機(jī)界面...
  • 常見打印機(jī)清零步驟
  • 安裝驅(qū)動時(shí)提示不包含數(shù)字簽名的解...
  • 共享打印機(jī)需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機(jī)的...
  • 錦州廣廈電腦上門維修

    報(bào)修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務(wù)區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務(wù): 修電腦,電腦修理,電腦維護(hù),上門維修電腦,黑屏藍(lán)屏死機(jī)故障排除,無線上網(wǎng)設(shè)置,IT服務(wù)外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設(shè)置,數(shù)據(jù)恢復(fù),密碼破解,光盤刻錄制作等服務(wù)

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 亚洲AV无码国产精品色午友在线| 亚洲精品人成无码中文毛片| 无码人妻精品一区二区三 | 亚洲精品成人无码中文毛片不卡| 免费a级毛片无码av| 人妻少妇精品无码专区二区| 亚洲AV无码AV吞精久久| 国产爆乳无码一区二区麻豆| 精品无码一区二区三区爱欲| 日韩精品无码人妻一区二区三区| 亚洲AV无码专区电影在线观看| 亚洲精品9999久久久久无码| 国产亚洲精久久久久久无码77777| 亚洲熟妇无码一区二区三区| 亚洲av无码乱码国产精品fc2| 精品一区二区三区无码视频| 在线观看无码AV网址| 无码人妻精品一区二区三区99仓本 | 亚洲成a人无码亚洲成www牛牛 | 国产成人无码精品一区二区三区| 久久亚洲AV成人无码国产电影 | 久久久久亚洲AV无码去区首| 未满十八18禁止免费无码网站| 人妻丰满?V无码久久不卡| 中文字幕av无码无卡免费| 日韩国产成人无码av毛片| 亚洲一区二区三区AV无码 | 亚洲AV成人片无码网站| 蜜桃臀无码内射一区二区三区| 亚洲Av综合色区无码专区桃色 | H无码精品3D动漫在线观看| 国产免费AV片无码永久免费| 久久久g0g0午夜无码精品| 亚洲综合一区无码精品| 中文无码不卡的岛国片| 久久久久亚洲AV无码观看| 2021无码最新国产在线观看| 18禁免费无码无遮挡不卡网站| 中文无码不卡的岛国片| 国产久热精品无码激情| 无码天堂亚洲国产AV|