首页 > 其他分享 >WinToUSB 9.0 离线注册

WinToUSB 9.0 离线注册

时间:2024-09-28 18:44:56浏览次数:1  
标签:sub int WinToUSB dd offset 离线 QWidget rdata 9.0

WinToUSB 9.0

qt程序,注册验证代码与EasyUEFI 大同小异,这里仅记录相关类、函数地址
关联 https://www.cnblogs.com/DirWang/p/18149030

目录

CActivationDlg

.rdata:008047F0 ; class CActivationDlg: CPopupWnd, CWinBaseFrame, QDialog, QWidget, QObject, QPaintDevice;  [MI] (#classinformer)
.rdata:008047F0                 dd offset const CActivationDlg::`RTTI Complete Object Locator'
.rdata:008047F4 const CActivationDlg::`vftable' dd offset sub_493D70
.rdata:008047F4                                         ; DATA XREF: sub_402670+B9↑o
.rdata:008047F4                                         ; sub_403F40+36↑o ...
.rdata:008047F8                 dd offset sub_493D90
.rdata:008047FC                 dd offset sub_493DF0
.rdata:00804800                 dd offset sub_403FB0
.rdata:00804804                 dd offset QWidget::event(QEvent *)
.rdata:00804808                 dd offset sub_49C380
.rdata:0080480C                 dd offset QObject::timerEvent(QTimerEvent *)
.rdata:00804810                 dd offset QObject::childEvent(QChildEvent *)
.rdata:00804814                 dd offset QObject::customEvent(QEvent *)
.rdata:00804818                 dd offset QObject::connectNotify(QMetaMethod const &)
.rdata:0080481C                 dd offset QObject::disconnectNotify(QMetaMethod const &)
.rdata:00804820                 dd offset QDialog::setVisible(bool)
.rdata:00804824                 dd offset QDialog::sizeHint(void)
.rdata:00804828                 dd offset QDialog::minimumSizeHint(void)
.rdata:0080482C                 dd offset QWidget::heightForWidth(int)
.rdata:00804830                 dd offset QWidget::hasHeightForWidth(void)
.rdata:00804834                 dd offset QWidget::mousePressEvent(QMouseEvent *)
.rdata:00804838                 dd offset QWidget::mouseReleaseEvent(QMouseEvent *)
.rdata:0080483C                 dd offset QWidget::mouseDoubleClickEvent(QMouseEvent *)
.rdata:00804840                 dd offset QWidget::mouseMoveEvent(QMouseEvent *)
.rdata:00804844                 dd offset QWidget::wheelEvent(QWheelEvent *)
.rdata:00804848                 dd offset sub_49DBF0
.rdata:0080484C                 dd offset QWidget::keyReleaseEvent(QKeyEvent *)
.rdata:00804850                 dd offset QWidget::focusInEvent(QFocusEvent *)
.rdata:00804854                 dd offset QWidget::focusOutEvent(QFocusEvent *)
.rdata:00804858                 dd offset QWidget::enterEvent(QEvent *)
.rdata:0080485C                 dd offset QWidget::leaveEvent(QEvent *)
.rdata:00804860                 dd offset sub_49BE90
.rdata:00804864                 dd offset QWidget::moveEvent(QMoveEvent *)
.rdata:00804868                 dd offset QDialog::resizeEvent(QResizeEvent *)
.rdata:0080486C                 dd offset sub_49C0A0
.rdata:00804870                 dd offset QDialog::contextMenuEvent(QContextMenuEvent *)
.rdata:00804874                 dd offset QWidget::tabletEvent(QTabletEvent *)
.rdata:00804878                 dd offset QWidget::actionEvent(QActionEvent *)
.rdata:0080487C                 dd offset QWidget::dragEnterEvent(QDragEnterEvent *)
.rdata:00804880                 dd offset QWidget::dragMoveEvent(QDragMoveEvent *)
.rdata:00804884                 dd offset QWidget::dragLeaveEvent(QDragLeaveEvent *)
.rdata:00804888                 dd offset QWidget::dropEvent(QDropEvent *)
.rdata:0080488C                 dd offset QDialog::showEvent(QShowEvent *)
.rdata:00804890                 dd offset QWidget::hideEvent(QHideEvent *)
.rdata:00804894                 dd offset QWidget::nativeEvent(QByteArray const &,void *,long *)
.rdata:00804898                 dd offset QWidget::changeEvent(QEvent *)
.rdata:0080489C                 dd offset QWidget::inputMethodEvent(QInputMethodEvent *)
.rdata:008048A0                 dd offset QWidget::inputMethodQuery(Qt::InputMethodQuery)
.rdata:008048A4                 dd offset QWidget::focusNextPrevChild(bool)
.rdata:008048A8                 dd offset QDialog::open(void)
.rdata:008048AC                 dd offset sub_49BB50
.rdata:008048B0                 dd offset QDialog::done(int)
.rdata:008048B4                 dd offset QDialog::accept(void)
.rdata:008048B8                 dd offset sub_49C0D0
.rdata:008048BC                 dd offset sub_49C170
.rdata:008048C0                 dd offset sub_49DAC0
.rdata:008048C4                 dd offset nullsub_15
.rdata:008048C8                 dd offset QWidget::showMinimized(void)
.rdata:008048CC                 dd offset nullsub_16
.rdata:008048D0                 dd offset nullsub_17
.rdata:008048D4                 dd offset nullsub_18
.rdata:008048D8                 dd offset sub_49DA70
.rdata:008048DC                 dd offset sub_4010F0

CActivationDlg QMetaObject__d

.rdata:009D4510 qt_meta_stringdata_CActivationDlg QArrayData <0FFFFFFFFh, 0Eh, 0, 30h>
.rdata:009D4510                                         ; DATA XREF: .rdata:CActivationDlg↓o
.rdata:009D4510                                         ; String: CActivationDlg, alloc: 0, capRvrsd 0
.rdata:009D4520                 QArrayData <0FFFFFFFFh, 15h, 0, 2Fh> ; String: sigReinitRegisterPage, alloc: 0, capRvrsd 0
.rdata:009D4530                 QArrayData <0FFFFFFFFh, 0, 0, 35h> ; String: , alloc: 0, capRvrsd 0
.rdata:009D4540 aCactivationdlg db 'CActivationDlg',0   ; DATA XREF: sub_493D90+11↑o
.rdata:009D454F aSigreinitregis db 'sigReinitRegisterPage',0
.rdata:009D4565                 align 4
.rdata:009D4568 qt_meta_dataCActivationDlg QMetaObjectPrivate <7, 0, 0, 0, 1, 0Eh, 0, 0, 0, 0, 0, 0, 0, 1>
.rdata:009D4568                                         ; DATA XREF: .rdata:CActivationDlg↓o
.rdata:009D4568                                         ; CLASS: CActivationDlg
.rdata:009D4568                                         ; MethodCount: 1 PropertyCount: 0 EnumCount: 0
.rdata:009D4568                                         ; ConstructorCount: 0 SignalCount: 1
.rdata:009D45A0                 QMetaMethod <1, 0, 13h, 2, 6> ; SIGNAL Public Void sigReinitRegisterPage()
.rdata:009D45B4                 dd 2Bh                  ; Void
.rdata:009D45B8                 db    0
.rdata:009D45B9                 db    0
.rdata:009D45BA                 db    0
.rdata:009D45BB                 db    0
.rdata:009D45BC CActivationDlg  QMetaObject__d <offset CPopupWnd, \
.rdata:009D45BC                                         ; DATA XREF: sub_4041A0+25D↑o
.rdata:009D45BC                                         ; CActivationDlg__qt_static_metacall+16↑o ...
.rdata:009D45BC                                 offset qt_meta_stringdata_CActivationDlg, \
.rdata:009D45BC                                 offset qt_meta_dataCActivationDlg, \
.rdata:009D45BC                                 offset CActivationDlg__qt_static_metacall, 0, 0>

CActivationRegisterPage

.rdata:00804E20 ; class CActivationRegisterPage: CBasePage, QWidget, QObject, QPaintDevice;  [MI] (#classinformer)
.rdata:00804E20                 dd offset const CActivationRegisterPage::`RTTI Complete Object Locator'
.rdata:00804E24 const CActivationRegisterPage::`vftable' dd offset sub_494130
.rdata:00804E24                                         ; DATA XREF: CActivationRegisterPage_405CF0+52↑o
.rdata:00804E24                                         ; sub_405E10+25↑o
.rdata:00804E28                 dd offset sub_494150
.rdata:00804E2C                 dd offset sub_4941B0
.rdata:00804E30                 dd offset sub_405DF0
.rdata:00804E34                 dd offset QWidget::event(QEvent *)
.rdata:00804E38                 dd offset QObject::eventFilter(QObject *,QEvent *)
.rdata:00804E3C                 dd offset QObject::timerEvent(QTimerEvent *)
.rdata:00804E40                 dd offset QObject::childEvent(QChildEvent *)
.rdata:00804E44                 dd offset QObject::customEvent(QEvent *)
.rdata:00804E48                 dd offset QObject::connectNotify(QMetaMethod const &)
.rdata:00804E4C                 dd offset QObject::disconnectNotify(QMetaMethod const &)
.rdata:00804E50                 dd offset QWidget::setVisible(bool)
.rdata:00804E54                 dd offset QWidget::sizeHint(void)
.rdata:00804E58                 dd offset QWidget::minimumSizeHint(void)
.rdata:00804E5C                 dd offset QWidget::heightForWidth(int)
.rdata:00804E60                 dd offset QWidget::hasHeightForWidth(void)
.rdata:00804E64                 dd offset QWidget::mousePressEvent(QMouseEvent *)
.rdata:00804E68                 dd offset QWidget::mouseReleaseEvent(QMouseEvent *)
.rdata:00804E6C                 dd offset QWidget::mouseDoubleClickEvent(QMouseEvent *)
.rdata:00804E70                 dd offset QWidget::mouseMoveEvent(QMouseEvent *)
.rdata:00804E74                 dd offset QWidget::wheelEvent(QWheelEvent *)
.rdata:00804E78                 dd offset QWidget::keyPressEvent(QKeyEvent *)
.rdata:00804E7C                 dd offset QWidget::keyReleaseEvent(QKeyEvent *)
.rdata:00804E80                 dd offset QWidget::focusInEvent(QFocusEvent *)
.rdata:00804E84                 dd offset QWidget::focusOutEvent(QFocusEvent *)
.rdata:00804E88                 dd offset QWidget::enterEvent(QEvent *)
.rdata:00804E8C                 dd offset QWidget::leaveEvent(QEvent *)
.rdata:00804E90                 dd offset QWidget::paintEvent(QPaintEvent *)
.rdata:00804E94                 dd offset QWidget::moveEvent(QMoveEvent *)
.rdata:00804E98                 dd offset QWidget::resizeEvent(QResizeEvent *)
.rdata:00804E9C                 dd offset QWidget::closeEvent(QCloseEvent *)
.rdata:00804EA0                 dd offset QWidget::contextMenuEvent(QContextMenuEvent *)
.rdata:00804EA4                 dd offset QWidget::tabletEvent(QTabletEvent *)
.rdata:00804EA8                 dd offset QWidget::actionEvent(QActionEvent *)
.rdata:00804EAC                 dd offset QWidget::dragEnterEvent(QDragEnterEvent *)
.rdata:00804EB0                 dd offset QWidget::dragMoveEvent(QDragMoveEvent *)
.rdata:00804EB4                 dd offset QWidget::dragLeaveEvent(QDragLeaveEvent *)
.rdata:00804EB8                 dd offset QWidget::dropEvent(QDropEvent *)
.rdata:00804EBC                 dd offset showEvent_406620
.rdata:00804EC0                 dd offset QWidget::hideEvent(QHideEvent *)
.rdata:00804EC4                 dd offset QWidget::nativeEvent(QByteArray const &,void *,long *)
.rdata:00804EC8                 dd offset QWidget::changeEvent(QEvent *)
.rdata:00804ECC                 dd offset QWidget::inputMethodEvent(QInputMethodEvent *)
.rdata:00804ED0                 dd offset QWidget::inputMethodQuery(Qt::InputMethodQuery)
.rdata:00804ED4                 dd offset QWidget::focusNextPrevChild(bool)
.rdata:00804ED8                 dd offset sub_405E90
.rdata:00804EDC                 dd offset nullsub_19
.rdata:00804EE0                 dd offset nullsub_20
.rdata:00804EE4                 dd offset setupUi_405EA0
.rdata:00804EE8                 dd offset set_button_406400
.rdata:00804EEC                 dd offset Register_4066F0
.rdata:00804EF0                 dd offset buy__open_store_wintousb_406650
.rdata:00804EF4                 dd offset sub_406640

CActivationRegisterPage QMetaObject__d

.rdata:009D4010 qt_meta_stringdata_CActivationRegisterPage QArrayData <0FFFFFFFFh, 17h, 0, 0A0h>
.rdata:009D4010                                         ; DATA XREF: .rdata:CActivationRegisterPage↓o
.rdata:009D4010                                         ; String: CActivationRegisterPage, alloc: 0, capRvrsd 0
.rdata:009D4020                 QArrayData <0FFFFFFFFh, 1Ah, 0, 0A8h> ; String: sigReinitOfflineActivePage, alloc: 0, capRvrsd 0
.rdata:009D4030                 QArrayData <0FFFFFFFFh, 0, 0, 0B3h> ; String: , alloc: 0, capRvrsd 0
.rdata:009D4040                 QArrayData <0FFFFFFFFh, 8, 0, 0A4h> ; String: QString&, alloc: 0, capRvrsd 0
.rdata:009D4050                 QArrayData <0FFFFFFFFh, 0Dh, 0, 9Dh> ; String: eEditionType&, alloc: 0, capRvrsd 0
.rdata:009D4060                 QArrayData <0FFFFFFFFh, 1Fh, 0, 9Bh> ; String: sigReinitActivationCompletePage, alloc: 0, capRvrsd 0
.rdata:009D4070                 QArrayData <0FFFFFFFFh, 6, 0, 0ABh> ; String: BRRET&, alloc: 0, capRvrsd 0
.rdata:009D4080                 QArrayData <0FFFFFFFFh, 0Eh, 0, 0A2h> ; String: slotReinitPage, alloc: 0, capRvrsd 0
.rdata:009D4090                 QArrayData <0FFFFFFFFh, 1Ah, 0, 0A1h> ; String: slotLicenseEditTextChanged, alloc: 0, capRvrsd 0
.rdata:009D40A0                 QArrayData <0FFFFFFFFh, 0Ah, 0, 0ACh> ; String: strLicense, alloc: 0, capRvrsd 0
.rdata:009D40B0 aCactivationreg db 'CActivationRegisterPage',0
.rdata:009D40B0                                         ; DATA XREF: sub_494150+11↑o
.rdata:009D40C8 aSigreinitoffli db 'sigReinitOfflineActivePage',0
.rdata:009D40E3                 align 4
.rdata:009D40E4 aQstring        db 'QString&',0
.rdata:009D40ED aEeditiontype_1 db 'eEditionType&',0
.rdata:009D40FB aSigreinitactiv db 'sigReinitActivationCompletePage',0
.rdata:009D411B aBrret_4        db 'BRRET&',0
.rdata:009D4122 aSlotreinitpage db 'slotReinitPage',0
.rdata:009D4131 aSlotlicenseedi db 'slotLicenseEditTextChanged',0
.rdata:009D414C aStrlicense     db 'strLicense',0
.rdata:009D4157                 align 4
.rdata:009D4158 qt_meta_dataCActivationRegisterPage QMetaObjectPrivate <7, 0, 0, 0, 4, 0Eh, 0, 0, 0, 0, 0, 0, 0, 2>
.rdata:009D4158                                         ; DATA XREF: .rdata:CActivationRegisterPage↓o
.rdata:009D4158                                         ; CLASS: CActivationRegisterPage
.rdata:009D4158                                         ; MethodCount: 4 PropertyCount: 0 EnumCount: 0
.rdata:009D4158                                         ; ConstructorCount: 0 SignalCount: 2
.rdata:009D4190                 QMetaMethod <1, 3, 22h, 2, 6> ; SIGNAL Public Void sigReinitOfflineActivePage(QString& , QString& , eEditionType& )
.rdata:009D41A4                 QMetaMethod <5, 4, 29h, 2, 6> ; SIGNAL Public Void sigReinitActivationCompletePage(BRRET& , QString& , QString& , eEditionType& )
.rdata:009D41B8                 QMetaMethod <7, 0, 32h, 2, 8> ; SLOT Private Void slotReinitPage()
.rdata:009D41CC                 QMetaMethod <8, 1, 33h, 2, 8> ; SLOT Private Void slotLicenseEditTextChanged(QString strLicense)
.rdata:009D41E0                 dd 2Bh                  ; Void
.rdata:009D41E4                 dd 80000003h            ; QString&
.rdata:009D41E8                 dd 80000003h            ; QString&
.rdata:009D41EC                 dd 80000004h            ; eEditionType&
.rdata:009D41F0                 dd 2
.rdata:009D41F4                 dd 2
.rdata:009D41F8                 dd 2
.rdata:009D41FC                 dd 2Bh                  ; Void
.rdata:009D4200                 dd 80000006h            ; BRRET&
.rdata:009D4204                 dd 80000003h            ; QString&
.rdata:009D4208                 dd 80000003h            ; QString&
.rdata:009D420C                 dd 80000004h            ; eEditionType&
.rdata:009D4210                 dd 2
.rdata:009D4214                 dd 2
.rdata:009D4218                 dd 2
.rdata:009D421C                 dd 2
.rdata:009D4220                 dd 2Bh                  ; Void
.rdata:009D4224                 dd 2Bh                  ; Void
.rdata:009D4228                 dd 0Ah                  ; QString
.rdata:009D422C                 dd 9                    ; strLicense
.rdata:009D4230                 db    0
.rdata:009D4231                 db    0
.rdata:009D4232                 db    0
.rdata:009D4233                 db    0
.rdata:009D4234 CActivationRegisterPage QMetaObject__d <offset CBasePage, \
.rdata:009D4234                                         ; DATA XREF: Register_4066F0:loc_406BBF↑o
.rdata:009D4234                                         ; sub_494130:loc_49413F↑o ...
.rdata:009D4234                                 offset qt_meta_stringdata_CActivationRegisterPage, \
.rdata:009D4234                                 offset qt_meta_dataCActivationRegisterPage, \
.rdata:009D4234                                 offset CActivationRegisterPage__qt_static_metacall, 0,\
.rdata:009D4234                                 0>

CActivationOfflinePage

.rdata:00804BF0 ; class CActivationOfflinePage: CBasePage, QWidget, QObject, QPaintDevice;  [MI] (#classinformer)
.rdata:00804BF0                 dd offset const CActivationOfflinePage::`RTTI Complete Object Locator'
.rdata:00804BF4 const CActivationOfflinePage::`vftable' dd offset sub_493F30
.rdata:00804BF4                                         ; DATA XREF: sub_404590+52↑o
.rdata:00804BF4                                         ; sub_404690+25↑o
.rdata:00804BF8                 dd offset sub_493F50
.rdata:00804BFC                 dd offset sub_493FB0
.rdata:00804C00                 dd offset sub_404670
.rdata:00804C04                 dd offset QWidget::event(QEvent *)
.rdata:00804C08                 dd offset QObject::eventFilter(QObject *,QEvent *)
.rdata:00804C0C                 dd offset QObject::timerEvent(QTimerEvent *)
.rdata:00804C10                 dd offset QObject::childEvent(QChildEvent *)
.rdata:00804C14                 dd offset QObject::customEvent(QEvent *)
.rdata:00804C18                 dd offset QObject::connectNotify(QMetaMethod const &)
.rdata:00804C1C                 dd offset QObject::disconnectNotify(QMetaMethod const &)
.rdata:00804C20                 dd offset QWidget::setVisible(bool)
.rdata:00804C24                 dd offset QWidget::sizeHint(void)
.rdata:00804C28                 dd offset QWidget::minimumSizeHint(void)
.rdata:00804C2C                 dd offset QWidget::heightForWidth(int)
.rdata:00804C30                 dd offset QWidget::hasHeightForWidth(void)
.rdata:00804C34                 dd offset QWidget::mousePressEvent(QMouseEvent *)
.rdata:00804C38                 dd offset QWidget::mouseReleaseEvent(QMouseEvent *)
.rdata:00804C3C                 dd offset QWidget::mouseDoubleClickEvent(QMouseEvent *)
.rdata:00804C40                 dd offset QWidget::mouseMoveEvent(QMouseEvent *)
.rdata:00804C44                 dd offset QWidget::wheelEvent(QWheelEvent *)
.rdata:00804C48                 dd offset QWidget::keyPressEvent(QKeyEvent *)
.rdata:00804C4C                 dd offset QWidget::keyReleaseEvent(QKeyEvent *)
.rdata:00804C50                 dd offset QWidget::focusInEvent(QFocusEvent *)
.rdata:00804C54                 dd offset QWidget::focusOutEvent(QFocusEvent *)
.rdata:00804C58                 dd offset QWidget::enterEvent(QEvent *)
.rdata:00804C5C                 dd offset QWidget::leaveEvent(QEvent *)
.rdata:00804C60                 dd offset QWidget::paintEvent(QPaintEvent *)
.rdata:00804C64                 dd offset QWidget::moveEvent(QMoveEvent *)
.rdata:00804C68                 dd offset QWidget::resizeEvent(QResizeEvent *)
.rdata:00804C6C                 dd offset QWidget::closeEvent(QCloseEvent *)
.rdata:00804C70                 dd offset QWidget::contextMenuEvent(QContextMenuEvent *)
.rdata:00804C74                 dd offset QWidget::tabletEvent(QTabletEvent *)
.rdata:00804C78                 dd offset QWidget::actionEvent(QActionEvent *)
.rdata:00804C7C                 dd offset QWidget::dragEnterEvent(QDragEnterEvent *)
.rdata:00804C80                 dd offset QWidget::dragMoveEvent(QDragMoveEvent *)
.rdata:00804C84                 dd offset QWidget::dragLeaveEvent(QDragLeaveEvent *)
.rdata:00804C88                 dd offset QWidget::dropEvent(QDropEvent *)
.rdata:00804C8C                 dd offset sub_4054A0
.rdata:00804C90                 dd offset QWidget::hideEvent(QHideEvent *)
.rdata:00804C94                 dd offset QWidget::nativeEvent(QByteArray const &,void *,long *)
.rdata:00804C98                 dd offset QWidget::changeEvent(QEvent *)
.rdata:00804C9C                 dd offset QWidget::inputMethodEvent(QInputMethodEvent *)
.rdata:00804CA0                 dd offset QWidget::inputMethodQuery(Qt::InputMethodQuery)
.rdata:00804CA4                 dd offset QWidget::focusNextPrevChild(bool)
.rdata:00804CA8                 dd offset sub_404710
.rdata:00804CAC                 dd offset nullsub_19
.rdata:00804CB0                 dd offset nullsub_20
.rdata:00804CB4                 dd offset setupUI_404730
.rdata:00804CB8                 dd offset set_button_405280
.rdata:00804CBC                 dd offset Offline_Register_4054E0
.rdata:00804CC0                 dd offset sub_4054D0
.rdata:00804CC4                 dd offset sub_4054C0

CActivationOfflinePage QMetaObject__d

.rdata:009D4250 qt_meta_stringdata_CActivationOfflinePage QArrayData <0FFFFFFFFh, 16h, 0, 0E0h>
.rdata:009D4250                                         ; DATA XREF: .rdata:CActivationOfflinePage↓o
.rdata:009D4250                                         ; String: CActivationOfflinePage, alloc: 0, capRvrsd 0
.rdata:009D4260                 QArrayData <0FFFFFFFFh, 1Fh, 0, 0E7h> ; String: sigReinitActivationCompletePage, alloc: 0, capRvrsd 0
.rdata:009D4270                 QArrayData <0FFFFFFFFh, 0, 0, 0F7h> ; String: , alloc: 0, capRvrsd 0
.rdata:009D4280                 QArrayData <0FFFFFFFFh, 6, 0, 0E8h> ; String: BRRET&, alloc: 0, capRvrsd 0
.rdata:009D4290                 QArrayData <0FFFFFFFFh, 8, 0, 0DFh> ; String: QString&, alloc: 0, capRvrsd 0
.rdata:009D42A0                 QArrayData <0FFFFFFFFh, 0Dh, 0, 0D8h> ; String: eEditionType&, alloc: 0, capRvrsd 0
.rdata:009D42B0                 QArrayData <0FFFFFFFFh, 0Eh, 0, 0D6h> ; String: slotReinitPage, alloc: 0, capRvrsd 0
.rdata:009D42C0                 QArrayData <0FFFFFFFFh, 8, 0, 0D5h> ; String: strEmail, alloc: 0, capRvrsd 0
.rdata:009D42D0                 QArrayData <0FFFFFFFFh, 0Ah, 0, 0CEh> ; String: strLicense, alloc: 0, capRvrsd 0
.rdata:009D42E0                 QArrayData <0FFFFFFFFh, 0Ch, 0, 0C9h> ; String: eEditionType, alloc: 0, capRvrsd 0
.rdata:009D42F0                 QArrayData <0FFFFFFFFh, 21h, 0, 0C6h> ; String: slotActivationCodeEditTextChanged, alloc: 0, capRvrsd 0
.rdata:009D4300                 QArrayData <0FFFFFFFFh, 11h, 0, 0D8h> ; String: strActivationCode, alloc: 0, capRvrsd 0
.rdata:009D4310                 QArrayData <0FFFFFFFFh, 1Ch, 0, 0DAh> ; String: slotOfflineActivateLinkPress, alloc: 0, capRvrsd 0
.rdata:009D4320                 QArrayData <0FFFFFFFFh, 6, 0, 0E7h> ; String: strUrl, alloc: 0, capRvrsd 0
.rdata:009D4330 aCactivationoff db 'CActivationOfflinePage',0
.rdata:009D4330                                         ; DATA XREF: sub_493F50+11↑o
.rdata:009D4347 aSigreinitactiv_0 db 'sigReinitActivationCompletePage',0
.rdata:009D4367                 align 4
.rdata:009D4368 aBrret_5        db 'BRRET&',0
.rdata:009D436F aQstring_0      db 'QString&',0
.rdata:009D4378 aEeditiontype_2 db 'eEditionType&',0
.rdata:009D4386 aSlotreinitpage_0 db 'slotReinitPage',0
.rdata:009D4395 aStremail       db 'strEmail',0
.rdata:009D439E aStrlicense_0   db 'strLicense',0
.rdata:009D43A9 aEeditiontype_3 db 'eEditionType',0
.rdata:009D43B6 aSlotactivation db 'slotActivationCodeEditTextChanged',0
.rdata:009D43D8 aStractivationc db 'strActivationCode',0
.rdata:009D43EA aSlotofflineact db 'slotOfflineActivateLinkPress',0
.rdata:009D4407 aStrurl_0       db 'strUrl',0
.rdata:009D440E                 align 10h
.rdata:009D4410 qt_meta_dataCActivationOfflinePage QMetaObjectPrivate <7, 0, 0, 0, 4, 0Eh, 0, 0, 0, 0, 0, 0, 0, 1>
.rdata:009D4410                                         ; DATA XREF: .rdata:CActivationOfflinePage↓o
.rdata:009D4410                                         ; CLASS: CActivationOfflinePage
.rdata:009D4410                                         ; MethodCount: 4 PropertyCount: 0 EnumCount: 0
.rdata:009D4410                                         ; ConstructorCount: 0 SignalCount: 1
.rdata:009D4448                 QMetaMethod <1, 4, 22h, 2, 6> ; SIGNAL Public Void sigReinitActivationCompletePage(BRRET& , QString& , QString& , eEditionType& )
.rdata:009D445C                 QMetaMethod <6, 3, 2Bh, 2, 8> ; SLOT Private Void slotReinitPage(QString& strEmail, QString& strLicense, eEditionType& eEditionType)
.rdata:009D4470                 QMetaMethod <0Ah, 1, 32h, 2, 8> ; SLOT Private Void slotActivationCodeEditTextChanged(QString strActivationCode)
.rdata:009D4484                 QMetaMethod <0Ch, 1, 35h, 2, 8> ; SLOT Private Void slotOfflineActivateLinkPress(QString strUrl)
.rdata:009D4498                 dd 2Bh                  ; Void
.rdata:009D449C                 dd 80000003h            ; BRRET&
.rdata:009D44A0                 dd 80000004h            ; QString&
.rdata:009D44A4                 dd 80000004h            ; QString&
.rdata:009D44A8                 dd 80000005h            ; eEditionType&
.rdata:009D44AC                 dd 2
.rdata:009D44B0                 dd 2
.rdata:009D44B4                 dd 2
.rdata:009D44B8                 dd 2
.rdata:009D44BC                 dd 2Bh                  ; Void
.rdata:009D44C0                 dd 80000004h            ; QString&
.rdata:009D44C4                 dd 80000004h            ; QString&
.rdata:009D44C8                 dd 80000005h            ; eEditionType&
.rdata:009D44CC                 dd 7                    ; strEmail
.rdata:009D44D0                 dd 8                    ; strLicense
.rdata:009D44D4                 dd 9                    ; eEditionType
.rdata:009D44D8                 dd 2Bh                  ; Void
.rdata:009D44DC                 dd 0Ah                  ; QString
.rdata:009D44E0                 dd 0Bh                  ; strActivationCode
.rdata:009D44E4                 dd 2Bh                  ; Void
.rdata:009D44E8                 dd 0Ah                  ; QString
.rdata:009D44EC                 dd 0Dh                  ; strUrl
.rdata:009D44F0                 db    0
.rdata:009D44F1                 db    0
.rdata:009D44F2                 db    0
.rdata:009D44F3                 db    0
.rdata:009D44F4 CActivationOfflinePage QMetaObject__d <offset CBasePage, \
.rdata:009D44F4                                         ; DATA XREF: Offline_Register_4054E0+2A8↑o
.rdata:009D44F4                                         ; sub_493F30:loc_493F3F↑o ...
.rdata:009D44F4                                 offset qt_meta_stringdata_CActivationOfflinePage, \
.rdata:009D44F4                                 offset qt_meta_dataCActivationOfflinePage, \
.rdata:009D44F4                                 offset CActivationOfflinePage__qt_static_metacall, 0, \
.rdata:009D44F4                                 0>

check

注册码

Register_4066F0

image-20240928181713392

image-20240928182200242

check_rsa_pubk_dec_49B2C0

DWORD __cdecl check_rsa_pubk_dec_49B2C0(char *out, wchar_t *Sourcea, int a3)
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  v4 = v3;
  memset(Dest, 0, 0x31);
  memset(data, 0, 0x1F);
  v5 = wcslen(v3);
  if ( Sourcea && wcslen(Sourcea) == 0x30 && v4 && v5 )
  {
    v6 = (char *)malloc(v5 + 1);
    String = v6;
    if ( v6 )
    {
      if ( v5 == wcstombs(v6, v4, v5 + 1) )
      {
        _strupr(String);
        if ( wcstombs(Dest, Sourcea, 0x31u) == 0x30 )
        {
          _strupr(Dest);
          LastError = xxb32_decode_49B190((int)data, (int)Dest);
          if ( (_WORD)v12 )
          {
            log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x2A0, LastError, v12);
          }
          else
          {
            LastError = rsa_dec_49AFD0(data, (int)out, a3);
            if ( v13 )
            {
              log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", v16, v17, 0x2A7);
            }
            else
            {
              v14 = out[0x1D];
              out[0x1D] = 0;
              if ( v14 != (unsigned __int8)crc8_49B7E0(0, (unsigned __int8 *)out) )
              {
                LastError = GetLastError();
                log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", v16, v17, 0x2B0);
              }
            }
          }
        }
        else
        {
          v11 = GetLastError() + 0x297000E00000000i64;
          LastError = v11;
          log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x298, v11);
        }
      }
      else
      {
        v10 = GetLastError() + 0x28F000E00000000i64;
        LastError = v10;
        log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x290, v10);
      }
    }
    else
    {
      v8 = GetLastError() + 0x289000300000000i64;
      LastError = v8;
      log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x28A, v8);
    }

    if ( String )
      free(String);
  }
  else
  {
    v15 = GetLastError() + 0x28101F100000000i64;
    LastError = v15;
    log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x282, v15);
  }

  return LastError;
}

rsa_dec_49AFD0

int __thiscall rsa_dec_49AFD0(void *data, int out, unsigned __int8 a3)
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  v3 = 0;
  memset(v14, 0, 0x1000u);
  v4 = "-----BEGIN RSA PUBLIC KEY-----\n"
       "MCYCHwC9s2qhNcaeKtlin3VtwnU9Vv4x/j0wBPS43F/8eKMCAwEAAQ==\n"
       "-----END RSA PUBLIC KEY-----\n";
  if ( a3 >= 6u )
    v4 = "-----BEGIN RSA PUBLIC KEY-----\n"
         "MCYCHwClu0T8p4bIbBbZW+PHRMA3XqSZ3+smlgw2JdmLMuUCAwEAAQ==\n"
         "-----END RSA PUBLIC KEY-----\n";

  qmemcpy(v14, v4, 0x75u);
  v5 = BIO_new_mem_buf(v14, 0x75);
  v6 = v5;
  if ( v5 )
  {
    bio = PEM_read_bio_(v5, 0, 0, 0);
    v9 = bio;
    if ( bio )
    {
      if ( RSA_eay_public_decrypt_71AEE0(30, (int)data, out, (int)bio) < 0 )
      {
        v11 = GetLastError() + 0x13D000200000000i64;
        v3 = v11;
        log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x13E, v11);
      }
    }
    else
    {
      v10 = GetLastError() + 0x135007200000000i64;
      v3 = v10;
      log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x136, v10);
    }

    BIO_free_all(v6);
    if ( v9 )
      RSA_free(v9);
  }
  else
  {
    v7 = GetLastError() + 0x12D000300000000i64;
    v3 = v7;
    log_4B0FD0((int)L"%S %d nRet=0x%016llX\n", ".\\License.cpp", 0x12E, v7);
  }

  CRYPTO_cleanup_all_ex_data();
  return v3;
}

激活码

.rdata:009F15BC ; class CActiveOnline: IActiveOnlineEx, IActiveOnline, IActiveOnlineBase;   (#classinformer)
.rdata:009F15BC                 dd offset const CActiveOnline::`RTTI Complete Object Locator'
.rdata:009F15C0 const CActiveOnline::`vftable' dd offset sub_56CB20
.rdata:009F15C0                                         ; DATA XREF: CActiveOnline_56C8E0+37↑o
.rdata:009F15C0                                         ; sub_56C9F0+26↑o
.rdata:009F15C4                 dd offset sub_56C5A0
.rdata:009F15C8                 dd offset sub_56C5B0
.rdata:009F15CC                 dd offset sub_570300
.rdata:009F15D0                 dd offset sub_570400
.rdata:009F15D4                 dd offset sub_5704A0
.rdata:009F15D8                 dd offset sub_570460
.rdata:009F15DC                 dd offset check_activation_570C40
.rdata:009F15E0                 dd offset sub_570BF0
.rdata:009F15E4                 dd offset sub_571300
.rdata:009F15E8                 dd offset sub_571370
.rdata:009F15EC                 dd offset sub_571390
.rdata:009F15F0                 dd offset sub_571730
.rdata:009F15F4                 dd offset sub_5718A0

check_activation_570C40

int __thiscall check_activation_570C40(_DWORD *this, void *Source, int a3)
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  v40 = this;
  *(_DWORD *)v69 = 7;
  v68 = 0;
  LOWORD(v66) = 0;
  v88 = 6;
  v46 = 7;
  v45 = 0;
  LOWORD(String[0]) = 0;
  v50 = 7;
  v49 = 0;
  LOWORD(lpWideCharStr) = 0;
  v54 = 7;
  v53 = 0;
  LOWORD(v52) = 0;
  v61 = 7;
  v60 = 0;
  LOWORD(v59) = 0;
  _Ptr = 0;
  memset(v87, 0, sizeof(v87));
  v71 = 0;
  v72 = 0;
  v73 = 0;
  v79 = 0;
  v80 = 0;
  v81 = 0;
  v82 = 0;
  v83 = 0;
  v84 = 0;
  v85 = 0;
  v75 = 0;
  *(_DWORD *)v76 = 0;
  v77 = 0;
  MultiByteStr = 0;
  v78 = 0;
  v74 = 0;
  v64 = 0xF;
  v63 = 0;
  LOBYTE(v62) = 0;
  v57 = 0xF;
  v56 = 0;
  LOBYTE(v55) = 0;
  v41 = operator new(1u);
  LOBYTE(v88) = 7;
  if ( this[2] )
  {
    if ( Source )
    {
      if ( a3 )
      {
        sub_411430(v65, Source, wcslen((const unsigned __int16 *)Source));
        v39 = sub_5782F0((int)(this + 0x14), v65, (int)v65);
        if ( (v39 & 0xFFF) == 0 )
        {
          v36 = &v58;
          v35 = (int)&v51;
          v39 = (int)&v28;
          sub_4105B0(v65, (int)&v28);
          // split '|'
          v35 = sub_571A10((int)v47, (int)v43, v28, v29, v30, v31, v32, v33, v34, v35, (int)v36);
          if ( (v35 & 0xFFF) == 0 )
          {
            v4 = v42[0];
            if ( v42[5] < (wchar_t *)8 )
              v4 = (const wchar_t *)v42;

            if ( (unsigned int)(wcstol(v4, 0, 0x10) - 0x8000) > 0x11 )
              v35 = 0x2E601001;
            else
              v35 = sub_572410();

            if ( (v35 & 0xFFF) == 0 )
            {
              v5 = v36;
              v6 = v36 + 0x48;
              if ( sub_4BA960((int)(v36 + 0x48)) )
              {
                if ( v45 == 8 || v49 == 8 )
                {
                  v7 = String[0];
                  if ( v46 < 8 )
                    v7 = (const WCHAR *)String;

                  WideCharToMultiByte(0, 0, v7, 0xFFFFFFFF, v65, 0xA, 0, 0);
                  p_lpWideCharStr = lpWideCharStr;
                  if ( v50 < 8 )
                    p_lpWideCharStr = (const WCHAR *)&lpWideCharStr;

                  WideCharToMultiByte(0, 0, p_lpWideCharStr, 0xFFFFFFFF, v67, 0xA, 0, 0);
                  if ( (unsigned int)v5[0x47] < 8 )
                    v9 = (const WCHAR *)(v5 + 0x42);
                  else
                    v9 = (const WCHAR *)v5[0x42];

                  WideCharToMultiByte(0, 0, v9, 0xFFFFFFFF, &v76[3], 0x40, 0, 0);
                  if ( (unsigned int)v6[6] < 8 )
                    v10 = (const WCHAR *)(v6 + 1);
                  else
                    v10 = (const WCHAR *)v6[1];

                  WideCharToMultiByte(0, 0, v10, 0xFFFFFFFF, v69, 0x18, 0, 0);
                  v37 = &v23;
                  std::string::string((std::string *)&v23, &v76[3]);
                  v11 = (const std::string *)sub_577E00(v38, v23, v24, v25, v26, v27, v28, (int)v29);
                  v87[0x2F] = 8;
                  std::string::assign((std::string *)&v58, v11, 0, 0xFFFFFFFF);
                  v87[0x2F] = 7;
                  std::string::~string((int)v38);
                  v37 = &v23;
                  std::string::string((std::string *)&v23, v69);
                  v12 = (const std::string *)sub_577E00(v38, v23, v24, v25, v26, v27, v28, (int)v29);
                  v87[0x2F] = 9;
                  std::string::assign((std::string *)&v51, v12, 0, 0xFFFFFFFF);
                  v87[0x2F] = 7;
                  std::string::~string((int)v38);
                  v13 = std::string::substr((std::string *)8, (std::string *)8, v30, v31);
                  if ( *((_DWORD *)v13 + 6) < 0x10u )
                    v14 = (char *)v13 + 4;
                  else
                    v14 = (const char *)*((_DWORD *)v13 + 1);

                  v15 = strcmp(v14, v65);
                  std::string::~string((int)v38);
                  if ( v15 )
                  {
                    v35 = 0x14B01003;
                  }
                  else
                  {
                    v19 = std::string::substr((std::string *)8, (std::string *)8, v30, v31);
                    if ( *((_DWORD *)v19 + 6) < 0x10u )
                      v20 = (char *)v19 + 4;
                    else
                      v20 = (const char *)*((_DWORD *)v19 + 1);

                    v21 = strcmp(v20, v67);
                    std::string::~string((int)v38);
                    if ( v21 )
                      v35 = 0x14C01003;
                  }
                }
                else
                {
                  v35 = 0x14401003;
                }
              }
              else
              {
                v35 = 0x1420100B;
              }
            }
          }
        }
      }
      else
      {
        v39 = 0x12801002;
      }
    }
    else
    {
      v39 = 0x12701002;
    }
  }
  else
  {
    v39 = 0x12501004;
  }

  sub_56D4D0();
  v16 = v39;
  v17 = (wchar_t **)String[0];
  if ( (v39 & 0xFFF) != 0 )
  {
    if ( v46 < 8 )
      v17 = String;

    v36 = (int *)v17;
    LastError = GetLastError();
    sub_575C20(L"[A] AutoActive failed! uReturn = %x SysErr = %d wsStatus = %s", v16, LastError);
  }
  else
  {
    if ( v46 < 8 )
      v17 = String;

    sub_575C20(L"[A] AutoActive success. wsStatus = %s", v17);
  }

  operator delete(v41);
  if ( v57 >= 0x10 )
    operator delete(v55);

  v57 = 0xF;
  v56 = 0;
  LOBYTE(v55) = 0;
  if ( v64 >= 0x10 )
    operator delete(v62);

  v64 = 0xF;
  v63 = 0;
  LOBYTE(v62) = 0;
  if ( v61 >= 8 )
    operator delete(v59);

  v61 = 7;
  v60 = 0;
  LOWORD(v59) = 0;
  if ( v54 >= 8 )
    operator delete((void *)v52);

  v54 = 7;
  v53 = 0;
  LOWORD(v52) = 0;
  if ( v50 >= 8 )
    operator delete((void *)lpWideCharStr);

  v50 = 7;
  v49 = 0;
  LOWORD(lpWideCharStr) = 0;
  if ( v46 >= 8 )
    operator delete(String[0]);

  v46 = 7;
  v45 = 0;
  LOWORD(String[0]) = 0;
  if ( *(_DWORD *)v69 >= 8u )
    operator delete(v66);

  return v39;
}

测试

image-20240928172515004

image-20240928172527653

image-20240928172551345

py

'''
pip install pycryptodome
'''
import base64
import ctypes
import io
import os
import random
from typing import Union
from Crypto.PublicKey import RSA
from Crypto.Util.number import inverse

import hashlib
import time
from datetime import datetime


def convert_to_time64(time_str):
    # 解析时间字符串为 datetime 对象
    dt_obj = datetime.strptime(time_str, r"%Y-%m-%d %H:%M:%S")
    # 将 datetime 对象转换为时间戳
    timestamp = dt_obj.timestamp()
    # # 将时间戳转换为 _time64 格式
    # time64 = int(timestamp * 1e7)  # 1e7 是将秒转换为 100 纳秒的单位
    time64 = int(timestamp)
    return time64


def convert_to_time_string(time64):
    # 将 _time64 格式的时间戳转换为秒数
    # timestamp = time64 / 1e7  # 将 100 纳秒转换为秒
    # 使用 fromtimestamp 将秒数转换为 datetime 对象
    dt_obj = datetime.fromtimestamp(time64)
    # 使用 strftime 方法将 datetime 对象格式化为时间字符串
    time_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S")
    return time_str


pubk = "-----BEGIN RSA PUBLIC KEY-----\n"\
    "MCYCHwC9s2qhNcaeKtlin3VtwnU9Vv4x/j0wBPS43F/8eKMCAwEAAQ==\n"\
    "-----END RSA PUBLIC KEY-----\n"


def rsa_pk_enc(data: bytes) -> bytes:
    # http://factordb.com/index.php?query=1309267119417726280330942057320079958095363483536018220587938405183944867
    # e=65537
    p = 1138829745998159918316484590691394789
    q = 1149660099780921729474053823339894503
    n = p*q
    # phi = (p - 1) * (q - 1)
    # d = inverse(e, phi)
    # print(d)
    d = 461760535243012729352417637561931856791126802617053449862506727428818545
    t = int.from_bytes(data, 'big')
    x = pow(t, d, n)
    bs = i2bs(x)
    # print(x)
    # print(bs,bs.hex())
    return bs


# from rsa import PublicKey, common, transform, core
# def rsa_pubkey_dec(cipher:bytes, PUBLIC_KEY:bytes=pubk.encode()):
#         public_key = PublicKey.load_pkcs1(PUBLIC_KEY)
#         encrypted = transform.bytes2int(cipher)
#         print('e:',public_key.e)
#         print('n:',public_key.n)
#         decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
#         print('rsa_pubkey_dec result:',decrypted)
#         text = transform.int2bytes(decrypted)
#         return text

table = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
         0x6B, 0x79, 0x6E, 0x6A, 0x41, 0x34, 0x45, 0x48, 0x78, 0x36, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
         0x40, 0x63, 0x4E, 0x57, 0x32, 0x7A, 0x6C, 0x53, 0x58, 0x4C, 0x59, 0x30, 0x64, 0x75, 0x77, 0x44,
         0x6F, 0x51, 0x70, 0x56, 0x46, 0x7C, 0x61, 0x37, 0x38, 0x5A, 0x62, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
         0x60, 0x39, 0x67, 0x65, 0x43, 0x74, 0x69, 0x73, 0x50, 0x6D, 0x68, 0x72, 0x66, 0x4F, 0x31, 0x33,
         0x55, 0x4B, 0x42, 0x35, 0x4D, 0x49, 0x54, 0x76, 0x71, 0x47, 0x4A, 0x7B, 0x52, 0x7D, 0x7E, 0x7F]


def s_transform(s: str):
    ret = ''
    for x in s:
        ret += chr(table[ord(x)])

    return ret


def re_transfrom(s: str):
    ret = ''
    for x in s:
        ret += chr(table.index(ord(x)))
    return ret


def i2bs(m: int, byteorder='big'):
    hex_m = m.to_bytes((m.bit_length() + 7) // 8, byteorder=byteorder)
    return hex_m


def rsa_pub_dec(decoded_data: bytes, PUBLIC_KEY: bytes = pubk.encode()) -> bytes:
    # base64.b64decode("MCYCHwC9s2qhNcaeKtlin3VtwnU9Vv4x")
    public_key = RSA.import_key(PUBLIC_KEY)

    # 获取模数和公钥指数
    n = public_key.n
    e = public_key.e

    # 打印结果
    print("Modulus (n):", n)
    # bs_n=n.to_bytes(128,'big')
    # print(bs_n,bs_n.hex())
    print("Exponent (e):", e)
    c = int.from_bytes(decoded_data, 'big')
    m = pow(c, e, n)
    print('pow:', m)
    hex_m = i2bs(m)
    return hex_m


class CustomBase32Codec:
    def __init__(self, custom_alphabet='ABCDEFGHJKLMNPQRSTUVWXYZ23456789'):
        if len(custom_alphabet) != 32:
            raise ValueError("Custom alphabet must contain 32 characters.")

        # Standard Base32 alphabet
        standard_alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'
        # Create translation tables
        self.encode_trans = bytes.maketrans(
            standard_alphabet, custom_alphabet.encode())
        self.decode_trans = bytes.maketrans(
            custom_alphabet.encode(), standard_alphabet)

    def encode(self, data):
        if isinstance(data, str):
            data = data.encode('utf-8')

        # Use the standard base64 library to encode and then translate to custom alphabet
        encoded = base64.b32encode(data)
        return encoded.translate(self.encode_trans)

    def decode(self, data):
        if isinstance(data, str):
            data = data.encode('utf-8')

        # Translate from custom alphabet to standard and then decode using standard base64 library
        standard_encoded = data.translate(self.decode_trans)
        return base64.b32decode(standard_encoded)


def reflect_data(x, width):
    # See: https://stackoverflow.com/a/20918545
    if width == 8:
        x = ((x & 0x55) << 1) | ((x & 0xAA) >> 1)
        x = ((x & 0x33) << 2) | ((x & 0xCC) >> 2)
        x = ((x & 0x0F) << 4) | ((x & 0xF0) >> 4)
    elif width == 16:
        x = ((x & 0x5555) << 1) | ((x & 0xAAAA) >> 1)
        x = ((x & 0x3333) << 2) | ((x & 0xCCCC) >> 2)
        x = ((x & 0x0F0F) << 4) | ((x & 0xF0F0) >> 4)
        x = ((x & 0x00FF) << 8) | ((x & 0xFF00) >> 8)
    elif width == 32:
        x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1)
        x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2)
        x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4)
        x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8)
        x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16)
    else:
        raise ValueError('Unsupported width')
    return x


def crc_poly(data, n, poly, crc=0, ref_in=False, ref_out=False, xor_out=0):
    g = 1 << n | poly  # Generator polynomial

    # Loop over the data
    for d in data:
        # Reverse the input byte if the flag is true
        if ref_in:
            d = reflect_data(d, 8)
        # XOR the top byte in the CRC with the input byte
        crc ^= d << (n - 8)
        # Loop over all the bits in the byte
        for _ in range(8):
            # Start by shifting the CRC, so we can check for the top bit
            crc <<= 1
            # XOR the CRC if the top bit is 1
            if crc & (1 << n):
                crc ^= g
    # Reverse the output if the flag is true
    if ref_out:
        crc = reflect_data(crc, n)

    # Return the CRC value
    return crc ^ xor_out


def CRC8_MAXIM(data: bytes):
    crc8 = crc_poly(data, n=8, poly=0x31, ref_in=True, ref_out=True, xor_out=0)
    return crc8


def convert_bytes_to_structure(st: object, byte: bytes):
    assert ctypes.sizeof(st) == len(byte), 'size error! need:%d,give:%d' % (
        ctypes.sizeof(st), len(byte))
    # ctypes.memmove(ctypes.pointer(st), byte, ctypes.sizeof(st))
    ctypes.memmove(ctypes.addressof(st), byte, ctypes.sizeof(st))


class TYPE_BASE(ctypes.LittleEndianStructure):
    _pack_: int = 1

    def __init__(self, data: Union[bytes, list, tuple, set]) -> None:
        if isinstance(data, bytes):
            convert_bytes_to_structure(self, data)
        elif isinstance(data, (list, tuple, set)):
            convert_bytes_to_structure(self, bytes(data))
        elif isinstance(data, io.IOBase):
            data.readinto(self)


'''
struct LicenseInfo{
    char var0;
    char var1;
    char major_version2;
    char var3;
    int expiration4;
    char var8;
    char unknow9[7];
    char var10;
    char var11;
    char unknow12[11];
    char crc1d;

};
'''


class LicenseInfo(TYPE_BASE):
    # _pack_: int = 1
    _fields_: list = [
        ("var0", ctypes.c_ubyte),
        ("var1", ctypes.c_ubyte),
        ("major_version2", ctypes.c_ubyte),
        ("var3", ctypes.c_ubyte),
        ("expiration4", ctypes.c_uint32),
        ("var8", ctypes.c_ubyte),
        ("unknow9", ctypes.c_byte*7),
        ("var10", ctypes.c_ubyte),
        ("var11", ctypes.c_ubyte),
        ("unknow12", ctypes.c_byte*11),
        ("crc1d", ctypes.c_ubyte
         ),
    ]

    def __init__(self, data: Union[bytes, list, tuple, set]) -> None:
        super().__init__(data)
        self.get_var()

    def get_var(self):
        if (self.var8 & 0xf) != 0:
            if (self.var8 & 0xf) == 1 or (self.var8 & 0xf) == 2:
                self.ver2 = self.var0
                self.ver1 = self.var10
        else:
            self.ver2 = self.var0 & 0x1f
            self.ver1 = self.var0 >> 5

    def __str__(self) -> str:
        info = ''
        info += 'ver1:%02x\n' % self.ver1
        info += 'ver2:%02x\n' % self.ver2
        info += 'major_version2:%02x\n' % self.major_version2
        info += 'var3:%02x\n' % self.var3
        info += 'expiration4:%s\n' % convert_to_time_string(self.expiration4)
        info += 'var8:%02x\n' % self.var8
        info += 'unknow9:%s\n' % bytes(self.unknow9)
        info += 'var10:%02x\n' % self.var10
        info += 'var11:%02x\n' % self.var11
        info += 'unknow12:%s\n' % bytes(self.unknow12)
        info += 'crc1d:%02x\n' % self.crc1d
        return info


def parse_license(data: bytes):
    custom_b32 = CustomBase32Codec()
    decoded_data = custom_b32.decode(data)
    # need FA8F3EFD9308B22C6B57B07291068F99D59A8E64B858042D1CF6
    #      5d438f96fa8f3efd9308b22c6b57b07291068f99d59a8e64b858042d1cf6
    print("Custom Base32 Decoded:", decoded_data)
    print('hex:', decoded_data.hex())
    # enc=custom_b32.encode(b'[email protected]')
    # print('enc:',enc)
    # text=rsa_pubkey_dec(decoded_data)

    text = rsa_pub_dec(decoded_data)
    print('rsa_pubkey_dec:', text)
    print('rsa_pubkey_dec hex:', text.hex())
    enc = rsa_pk_enc(text)
    print('test enc:', enc, enc.hex())

    # rsa_dec=bytes.fromhex('210102000AA5325610004C4A41434FEB07699B0BD58FBD6A616AE7ED19')
    rsa_dec = text[:-1]+b'\x00'
    # CRC-8/MAXIM
    crc8 = CRC8_MAXIM(rsa_dec)
    print('crc8/MAXIM :', crc8, hex(crc8))

    obj = LicenseInfo(text)
    print(str(obj))
    # 示例用法
    # time_str = "2024-01-01 12:00:00"
    # time64 = convert_to_time64(time_str)
    # print('time64:',time64)


def GenActivationCode(license, machine_code) -> str:
    lic_md5 = hashlib.md5(license).hexdigest()
    # print('lic_md5:',lic_md5)
    mc_md5 = hashlib.md5(machine_code).hexdigest()
    # print('mc_md5:',mc_md5)

    s = '8000|%s|%s|%s' % (lic_md5[8:16], mc_md5[8:16], machine_code.decode())
    # print(s)
    re_s = re_transfrom(s)
    # print(re_s)
    return re_s


def GenLicense(ver2=1) -> bytes:
    lic = b''
    #ver2 = 1
    ver1 = 1  # random.randint(1,4)
    lic += (ver2 | (ver1 << 5)).to_bytes(1, 'little')  # this way var8  must 0
    lic += b'\x01'  # var1
    lic += b'\xff'  # major_version2
    lic += b'\x00'  # var3
    expiration4 = convert_to_time64('2077-01-01 12:00:00')
    t = convert_to_time_string(expiration4)
    # print(t)
    lic += expiration4.to_bytes(4, 'little')
    var8 = b'\x00'
    lic += var8
    lic += os.urandom(7)  # unknow9[7]
    lic += b'\x00'  # var10
    lic += b'\xff'  # var11  month
    lic += os.urandom(11)  # unknow12[11]
    crc8 = CRC8_MAXIM(lic+b'\x00')
    lic += crc8.to_bytes(1, 'little')
    # print('lic:',lic,lic.hex())
    # print(str(LicenseInfo(lic)))
    enc = rsa_pk_enc(lic)
    license = CustomBase32Codec().encode(enc)

    return license

class Products:
    EASYUEFI=1
    WINTOUSB=2
    
if __name__ == "__main__":
    print('[#]Must be used without internet access!')
    license = GenLicense(Products.WINTOUSB)
    print('License:', license.decode())
    print('Please input MachineCode:')
    mc = input().encode()
    ac = GenActivationCode(license, mc)
    print('ActivationCode', ac)


标签:sub,int,WinToUSB,dd,offset,离线,QWidget,rdata,9.0
From: https://www.cnblogs.com/DirWang/p/18438265

相关文章

  • [使用目前最新版]HybridCLR6.9.0+YooAsset2.2.4实现纯C# Unity热更新方案 (一)
    1.前言什么是热更新游戏或者软件更新时,无需重新下载客户端进行安装,而是在应用程序启动的情况下,在内部进行资源或者代码更新Unity目前常用热更新解决方案HybridCLR,Xlua,ILRuntime等Unity目前常用资源管理解决方案AssetBundles,Addressable,YooAsset等在这里我们采用HybridCLR......
  • C++离线查询
    前言C++算法与数据结构打开打包代码的方法兼述单元测试概念及原理离线算法(offlinealgorithms),离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化,且在解决一个问题后就要立即得出结果的前提下进行的计算。通俗的说:离线查询:问完所有问题后,依次回答。可......
  • k8s离线部署v1.28.0版本(基于docker容器)
    1.环境配置主机名配置磁盘大小操作系统ip地址k8s-master2c4g50gcentos7.6192.168.100.194k8s-node12c4g50gcentos7.6192.168.100.195k8s-node22c4g50gcentos7.6192.168.100.196yum2c4g50gcentos7.6192.168.100.2012.必要环境准备1)关......
  • 【云原生安全篇】Trivy助力离线Harbor漏洞扫描实践
    【云原生安全篇】Trivy助力离线Harbor漏洞扫描实践目录1概念1.1为什么需要离线漏洞扫描1.2Trivy和Harbor简介1.3实现离线漏洞扫描的技术方案2实践:Trivy为Harbor提供离线漏洞扫描2.1环境准备2.2安装Trivy作为数据库离线包下载代理2.2.1通过包管理工具安装2.2......
  • 欧拉系统postgresql 与PostGis 离线环境安装
    postgresql与PostGis离线环境安装上传文件至服务器#安装所需依赖yuminstall/opt/PGsql-13-gis/rpm/*-yPostgresql安装tar-zxvfpostgresql-13.2.tar.gz#进入该目录./configure--prefix=/usr/local/pgsql--with-uuid=ossp--with-libxmlmakemakeinstall#添......
  • JRebel and XRebel离线安装
    近期,使用JRebelandXRebel,发现总是安装不上,可能是网络的原因吧。所以就使用离线方式进行安装。JRebel是一款用于Java开发的生产力工具。它的主要功能是加速开发周期,通过在不重启JVM的情况下即时加载代码变更。这样,开发者可以立即看到代码修改的效果,而无需重新部署应用程序,从......
  • 视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?
    视频汇聚/视频存储/安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。EasyCVR安防监控视频综合管理平台采用先进的网络传输技术,支持高清视频的接入和传输,能......
  • 离线一机一码验证和网络验证的区别以及使用场景 (附一机一码加密打包大师下载链接)
    本文主要介绍离线一机一码验证和网络验证的区别及其各自的特点和优势。通过对比这两种验证方式的工作原理、优缺点,使开发人员更好地理解并选择适合自己需求的验证方案。接下来,我们将详细探讨每种验证方式的具体实现和应用场景。离线一机一码验证和网络验证结合实例介绍  ......
  • EasyCVR平台RTMP推流显示离线是什么原因?
    EasyCVR安防监控视频综合管理平台采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。有用户反馈,在测试EasyCVR平台推流功能时,OBS显示正在直播,但平台的通道状态却是离线,于是咨询我们如何处理。今天来介绍下排查及解决过程。1)首先检查防火墙是否......
  • 一款可以离线使用的本地大模型
    2024年,AI已经成为了大家热议的话题。AI已经在各个领域展示出了惊人的能力,很多人通过各种渠道也都已经体验了AI产品,从最早爆火的ChatGPT,到后来的Gemini,再到最近刷屏的Kimi。每个产品都有自己独特的优势以及用户群体,AI产品也确实在工作生活中带给我们很大的便捷。今天我们要向大......