前些天办理了一张招行的usb加密的U盘,花费了人民币88元,昨天晚上闲的无聊,简单分析了一下,发现了一些问题,
具体内容请参考:http://www.liveaa.com/categories/120-Software-internal-analyze.
首先, 关于usb读取方面,主要在开始登陆的时候使用,退出的时候也要被检测一下(次要), 在使用过程中,不需要这个USB(在转帐的时候,我没有检测). 可以做一个软件狗, 模拟USB.
其次, 它使用了2个dll, CmbPb40.ocx(招行自己开发) 和HttpComm.dll(代工版吧), 网上都没有他们的任何Hash数值,这里我给一下:
CmbPb40.ocx, md5:e957b7602d97f09a503a0f85435204a5
HttpComm.dll, md5:f3231b0a74d79853eb37914f8bd47bf6
而且也没有任何签名, 所以如果Hack一下它的代码,放一些不该有的代码是很轻松的事情.
招行的网上银行专业版,通信模块部分,没有使用自己公司独立开发的控件,而是使用了浙江的一家小公司的产品,
大致的思路是数据从httpcomm.dll走, httpcomm.dll相当与一个本地的代理服务器. 可以参考如下的一些字眼:
SOFTWARE/Hexin Corp/Hexin SSL Secure Proxy/Comm 127.0.0.1 Installed
SOFTWARE/Hexin Corp/Hexin SSL Secure Proxy/Settings ProxyServer ProxyEnable
Software/Microsoft/Windows/CurrentVersion/Internet Settings https //读取设置了
而且它非常依赖于Wininet函数,如下列表,通过这些函数的数据, 可以很容易得到.
HttpAddRequestHeadersA
HttpOpenRequestA
HttpQueryInfoA
HttpSendRequestA
InternetCloseHandle
InternetConnectA
InternetGetLastResponseInfoA
InternetOpenA
InternetQueryDataAvailable
InternetReadFile
InternetSetFilePointer
InternetSetOptionA
InternetSetStatusCallback
InternetWriteFile.
至于调用Winsock,则使用了WSock32.dll 的如下函数:
recvfrom
setsockopt
inet_addr
inet_ntoa
sendto
socket
gethostbyname
WSAStartup
WSACleanup
recv
accept
bind
closesocket
connect
getpeername
getsockname
htonl
htons
ioctlsocket
ntohs
send
WSAAsyncSelect
WSAGetLastError
WSASetLastError
至于CmbPb40.ocx, 则是用Delphi开发出来的一个控件, 之前经常Crash. 现在基本上稳定了,下面是它使用的一些文件:
About.dfm
About.pas
AccountMgr.dfm
AccountMgr.pas
AgrCreateAgc.dfm
AgrCreateAgc.pas
AgrSelectAgc.dfm
ApplyFunctionOfCard.dfm
AssignRpt.dfm
BackupPrompt.dfm
BatchTransfer.dfm
BatchTransferGetPwd.dfm
BatchTransferInfoEdit.dfm
BatchTransferResult.dfm
Calendar.dfm
CardTemplate.dfm
CashFlowRpt.dfm
CertCancel.dfm
CertCardRelationRemove.dfm
CertExport.dfm
CertHistoryQuery.dfm
CertQuery.dfm
CertSetQuestion.dfm
CertSetQuestionConfirm.dfm
ChangeUserPassword.dfm
CheckSys.dfm
CmbPb40.ocx.dpr
CommSetting.dfm
ConfirmInfo.dfm
CreditAutoContact.dfm
CustomerSetup.dfm
CustomizeRpt.dfm
DBLogDlg.dfm
DBPWDlg.dfm
DeleteUser.dfm
DetailRpt.dfm
EditTransferDetail.dfm
EditTransferRecord.dfm
events.txt
FPBook.dfm
FPBookAdd.dfm
FPBookCondition.dfm
FPBookModify.dfm
FPDebt.dfm
FPDebtAdd.dfm
FPDebtCondition.dfm
FPDebtModify.dfm
FPPayment.dfm
FPPaymentAdd.dfm
FPPaymentCondition.dfm
FPPaymentLog.dfm
FPPaymentModify.dfm
FXExchange.dfm
FXShowMarketInfo.dfm
GetRelateCardAuth.dfm
GetRelatedCardPassword.dfm
GetUserPassword.dfm
Guide.dfm
HardCertFormatKey.dfm
HardCertWebLogin.dfm
HardCertWizard.dfm
IncomeVsSpendRpt.dfm
IVLogin.dfm
Log.dfm
Login.dfm
Main.dfm
NetPay.dfm
PayeeInfoWizard.dfm
PBActiveXProj.dfm
PbTemplate.dfm
PbTemplate1.dfm
PopupTemplate.dfm
ProgramLogin.dfm
PromptAndInput.dfm
ProtocolAccountMgr.dfm
QRLablEd.dfm
QRPrev.dfm
QRPrgres.dfm
QueryCredit.dfm
QueryCreditCondition.dfm
QueryPaymentCondition.dfm
QueryPaymentRecord.dfm
QueryTransferCondition.dfm
QueryTransferRecord.dfm
ReceiverInfo.dfm
RPTCard.dfm
SelectReceiverInfo.dfm
SplitData.dfm
Status.dfm
System.dfm
TransferAddressBook.dfm
TransferInFrame.dfm
TransferInsideRegion.dfm
TransferOutFrame.dfm
TransferOutsideRegion.dfm
TransferToOwnedAccount.dfm
ViewTransDetail.dfm
WealthAccountTransfer.dfm
WealthLogin.dfm
WebLogin.dfm
WizardMain.dfm
Wzd_CertApply.dfm
Wzd_CertImport.dfm
Wzd_OK.dfm
Wzd_Select.dfm
Wzd_User.dfm
Wzd_UserByName.dfm
整个分析过程不是很长, 如果这些信息被不怀好意的伙计再加以详细的分析,那么招行的网络安全水平又可能降级了.