首页
社区
课程
招聘
[求助]这个程序运行起来后看着是一个.NET的程序,但是不知道如何脱壳,有人能帮忙看看吗
发表于: 2019-3-21 02:35 5694

[求助]这个程序运行起来后看着是一个.NET的程序,但是不知道如何脱壳,有人能帮忙看看吗

2019-3-21 02:35
5694
如题,文件太大无法上传,传了百度网盘。
链接: https://pan.baidu.com/s/19j-A20jVRUAPTDwG6uIgxg 提取码: hwbg

求大神帮忙

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1787
活跃值: (913)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

这个是个python程序

import base64, uuid, os, time, datetime
from datetime import timedelta
from PyQt4.QtGui import QDialog
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtCore import pyqtSignature, QRegExp
import webbrowser
from Ui_UserLogin import Ui_Dialog
import DBmysql, LogPrint, IPinfo
from win32gui import *
import win32con, sys
reload(sys)
sys.setdefaultencoding('utf8')
DB_MYSQL = DBmysql.ConnectMySQL()

class LoginDialog(QDialog, Ui_Dialog):
    """
    Class documentation goes here.
    """

    def __init__(self, parent=None):
        """
        Constructor
        """
        QDialog.__init__(self, parent)
        self.setupUi(self)
        self.versionNo = 'V1.2'
        self.oldVersion = False
        self.setWindowIcon(QtGui.QIcon(':/myicon.ico'))
        self.setWindowTitle(u'\u8010\u514b\u4e2d\u56fd\u6ce8\u518c\u673a+\u7ed1\u53f7\u673a+\u63d0\u53d6Token+\u8bbe\u7f6e\u5730\u5740--\u5c0f\u7334\u5b50')
        self.le_name.setPlaceholderText(u'\u7528\u6237\u540d')
        self.le_password.setPlaceholderText(u'\u5bc6\u7801')
        regExp = QRegExp('[a-zA-Z0-9_]+')
        self.le_name.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_password.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_zcName.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_zcPass.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_zcPass2.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_czName.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_czPass.setValidator(QtGui.QRegExpValidator(regExp, self))
        self.le_czCard.setValidator(QtGui.QRegExpValidator(regExp, self))
        if os.path.exists('lUSHEN_USER.TXT'):
            fileHandle = open('lUSHEN_USER.TXT')
            lineList = fileHandle.readlines()
            fileHandle.close()
            if len(lineList) >= 1:
                self.le_name.setText(lineList[0])
            if len(lineList) >= 2:
                self.le_password.setText(lineList[1])
        VersionNo = DB_MYSQL.selectOneList("select value from tb_common_qiandao where code='version'")
        if VersionNo == 'error':
            return
        LogPrint.printLog('\xe6\x9c\x8d\xe5\x8a\xa1\xe7\x89\x88\xe6\x9c\xac\xe5\x8f\xb7\xef\xbc\x9a' + VersionNo['value'])
        if self.versionNo != VersionNo['value']:
            QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u5f53\u524d\u4e0d\u662f\u6700\u65b0\u7248\u672c\uff0c\u8bf7\u4e0b\u8f7d\u6700\u65b0\u7248\u672c')
            url = 'http://pan.baidu.com/s/1hrTuXms'
            webbrowser.open(url, new=0, autoraise=True)
            self.oldVersion = True
            return
        ip_gsd = IPinfo.getIP()
        self.ip_str = str(ip_gsd[3])
        self.ip_gsd_str = str(ip_gsd[0] + ip_gsd[1] + ip_gsd[2])
        self.jiQiMa = self.get_mac_address()
        self.le_JiQiMa.setText(self.jiQiMa)
        self.start_game = GameOverTimeHandler()
        self.start_game.start()

    def get_mac_address(self):
        node = uuid.getnode()
        mac = uuid.UUID(int=node).hex[-12:]
        base64_mac = base64.b64encode(mac)
        return base64_mac

    @pyqtSignature('')
    def on_commandLinkButton_clicked(self):
        url = 'http://t.cn/RTawWMc'
        webbrowser.open(url, new=0, autoraise=True)

    @pyqtSignature('')
    def on_pushButton_tryUser_clicked(self):
        loginName = self.le_name.text()
        loginPass = self.le_password.text()
        try:
            loginFlag, messg, nameok, endtimeok, proxyname, createtimeok = shiyong(str(loginName).strip(), str(loginPass).strip())
        except Exception as e:
            QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u8bf7\u518d\u6b21\u6253\u5f00\u8f6f\u4ef6\u5c1d\u8bd5\uff0c\u8c22\u8c22\uff01\u5c0f\u7334\u5b50\u795d\u60a8\u751f\u6d3b\u6109\u5feb\uff01')

        if loginFlag:
            fileHandle = open('lUSHEN_USER.TXT', 'w')
            fileHandle.write(str(loginName).strip() + '\n' + str(loginPass).strip())
            fileHandle.close()
            self.nameok = str(nameok).strip()
            self.endtimeok = '0'
            self.proxyname = '\xe8\xaf\x95\xe7\x94\xa8\xe7\x94\xa8\xe6\x88\xb7'
            self.createtimeok = str(createtimeok).strip()
            self.accept()
        else:
            if messg == 'timeout':
                QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u8bf7\u8d2d\u4e70\u5361\u5bc6')
            else:
                QtGui.QMessageBox.critical(self, u'\u9519\u8bef', u'\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u5339\u914d')

    @pyqtSignature('')
    def on_btn_login_clicked(self):
        if self.oldVersion == True:
            QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u5f53\u524d\u4e0d\u662f\u6700\u65b0\u7248\u672c\uff0c\u8bf7\u4e0b\u8f7d\u6700\u65b0\u7248\u672c\uff1aQQ\u7fa4\uff1a701788997')
            return
        loginName = self.le_name.text()
        loginPass = self.le_password.text()
        loginFlag = False
        try:
            loginFlag, messg, nameok, endtimeok, proxyname, createtimeok = denglu(str(loginName).strip(), str(loginPass).strip(), self.jiQiMa)
        except Exception as e:
            print str(e)
            QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u8bf7\u518d\u6b21\u6253\u5f00\u8f6f\u4ef6\u5c1d\u8bd5\uff0c\u8c22\u8c22\uff01\u5c0f\u7334\u5b50\u795d\u60a8\u751f\u6d3b\u6109\u5feb\uff01')
            return

        if loginFlag:
            fileHandle = open('lUSHEN_USER.TXT', 'w')
            fileHandle.write(str(loginName).strip() + '\n' + str(loginPass).strip())
            fileHandle.close()
            self.nameok = str(nameok).strip()
            self.endtimeok = str(endtimeok).strip()
            self.proxyname = str(proxyname).strip()
            self.createtimeok = str(createtimeok).strip()
            self.start_game.stop()
            self.accept()
        else:
            if messg == 'timeout':
                QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u8bf7\u8d2d\u4e70\u5361\u5bc6')
            else:
                if messg == 'macError':
                    QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u7528\u6237\u5df2\u7ecf\u7ed1\u5b9a\u5176\u4ed6\u673a\u5668\uff0c\u4e00\u4e2a\u6708\u514d\u8d39\u6362\u7ed12\u6b21\uff0c\u6bcf\u6b21\u6682\u5b9a\u6536\u8d391\u5143\uff0c\u9700\u8981\u627e\u5e08\u7236\u6362\u7ed1\uff01')
                else:
                    QtGui.QMessageBox.critical(self, u'\u9519\u8bef', u'\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u5339\u914d')

    @pyqtSignature('')
    def on_btn_zc_clicked(self):
        zcName = self.le_zcName.text()
        zcPass = self.le_zcPass.text()
        zcPass2 = self.le_zcPass2.text()
        print zcName
        if str(zcName).strip() == '' or str(zcPass).strip() == '':
            QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01')
        else:
            if str(zcPass).strip() != str(zcPass2).strip():
                QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u4e24\u6b21\u5bc6\u7801\u4e0d\u4e00\u6837\uff01')
            else:
                try:
                    UserCount = DB_MYSQL.selectOneList("SELECT count(*) conutnum FROM tb_user_qiandao where name='" + str(zcName).strip() + "'")
                    if UserCount['conutnum'] == 0:
                        sql = 'SELECT SYSDATE() nowtime from dual'
                        serverTime = DB_MYSQL.selectOneList(sql)
                        nowTime = serverTime['nowtime']
                        nowTime = str(nowTime)
                        sql = "INSERT INTO tb_user_qiandao(name,pass,createtime,endtime,ip,ipaddress) VALUES('" + str(zcName).strip() + "','" + str(zcPass).strip() + "','" + nowTime + "','" + nowTime + "','" + self.ip_str + "','" + self.ip_gsd_str + "')"
                        DB_MYSQL.inserOneDate(sql)
                        QtGui.QMessageBox.information(self, u'\u606d\u559c', u'\u606d\u559c\u6ce8\u518c\u6210\u529f\uff01')
                    else:
                        QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u8be5\u7528\u6237\u540d\u5df2\u7ecf\u88ab\u4f7f\u7528\uff0c\u8bf7\u4fee\u6539\u7528\u6237\u540d\uff01')
                except Exception as e:
                    QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u8bf7\u518d\u6b21\u6253\u5f00\u8f6f\u4ef6\u5c1d\u8bd5\uff0c\u8c22\u8c22\uff01\u5c0f\u7334\u5b50\u795d\u60a8\u751f\u6d3b\u6109\u5feb\uff01 ')

    @pyqtSignature('')
    def on_btn_cz_clicked(self):
        czName = self.le_czName.text()
        czPass = self.le_czPass.text()
        czCard = self.le_czCard.text()
        if str(czName).strip() == '' or str(czPass).strip() == '' or str(czCard).strip() == '':
            QtGui.QMessageBox.information(self, u'\u63d0\u793a', u'\u7528\u6237\u540d\u3001\u5bc6\u7801\u3001\u5361\u5bc6\u4e0d\u80fd\u4e3a\u7a7a\uff01')
        else:
            try:
                czFlag, messge = chongzhi(str(czName).strip(), str(czPass).strip(), str(czCard).strip())
                if czFlag:
                    QtGui.QMessageBox.information(self, u'\u606d\u559c', u'\u606d\u559c\u5145\u503c\u6210\u529f\uff01')
                else:
                    if messge == 'nameError':
                        QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u8be5\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\uff01')
                    else:
                        QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u5361\u5bc6\u9519\u8bef\u6216\u8005\u5df2\u7ecf\u4f7f\u7528\uff01')
            except Exception as e:
                QtGui.QMessageBox.critical(self, u'\u63d0\u793a', u'\u8bf7\u518d\u6b21\u6253\u5f00\u8f6f\u4ef6\u5c1d\u8bd5\uff0c\u8c22\u8c22\uff01\u5c0f\u7334\u5b50\u795d\u60a8\u751f\u6d3b\u6109\u5feb\uff01 ')


def chongzhi(username, password, cardNO):
    sql = "SELECT count(*) conutnum,t.endtime FROM tb_user_qiandao t where t.name='" + username + "' and t.pass='" + password + "'"
    usersCount = DB_MYSQL.selectOneList(sql)
    if usersCount['conutnum'] == 1:
        sql = 'SELECT SYSDATE() nowtime from dual'
        serverTime = DB_MYSQL.selectOneList(sql)
        nowTime = serverTime['nowtime']
        user_time = time.strptime(usersCount['endtime'], '%Y-%m-%d %H:%M:%S')
        a_datetime = nowTime
        b_datetime = datetime.datetime(*user_time[:6])
        print b_datetime - a_datetime
        if b_datetime > a_datetime:
            sql = "SELECT count(*) conutnum,t.value,t.card,t.isused,t.proxyname FROM tb_card_qiandao t where t.card='" + cardNO + "' and t.isused='0'"
            cardCount = DB_MYSQL.selectOneList(sql)
            if cardCount['conutnum'] == 0:
                return (False, 'cardError')
            cardvalue = int(cardCount['value'])
            endtime = b_datetime + timedelta(days=cardvalue)
            DB_MYSQL.updateOneDate("UPDATE tb_user_qiandao  set endtime = '" + str(endtime) + "',proxyname='" + str(cardCount['proxyname']) + "' where name='" + username + "'")
            DB_MYSQL.updateOneDate("UPDATE tb_card_qiandao  set isused = '" + username + "' where card='" + cardNO + "'")
            return (
             True, 'cardSuccess')
        else:
            cardCount = DB_MYSQL.selectOneList("SELECT count(*) conutnum,t.value,t.card,t.isused,t.proxyname FROM tb_card_qiandao t where t.card='" + cardNO + "' and t.isused='0'")
            if cardCount['conutnum'] == 0:
                return (False, 'cardError')
            cardvalue = int(cardCount['value'])
            endtime = a_datetime + timedelta(days=cardvalue)
            strendtime = str(endtime)
            print strendtime
            DB_MYSQL.updateOneDate("UPDATE tb_user_qiandao  set endtime = '" + strendtime + "',proxyname='" + str(cardCount['proxyname']) + "'  where name='" + username + "'")
            DB_MYSQL.updateOneDate("UPDATE tb_card_qiandao  set isused = '" + username + "' where card='" + cardNO + "'")
            return (
             True, 'cardSuccess')
    else:
        return (
         False, 'nameError')


def denglu(name, password, jiQiMa):
    usersCount = DB_MYSQL.selectOneList("SELECT count(*) countnum,t.name,t.endtime,t.proxyname,t.createtime FROM tb_user_qiandao t where t.name='" + name + "' and t.pass='" + password + "'")
    if usersCount['countnum'] == 1:
        sql = 'SELECT SYSDATE() nowtime from dual'
        serverTime = DB_MYSQL.selectOneList(sql)
        nowTime = serverTime['nowtime']
        user_time = time.strptime(usersCount['endtime'], '%Y-%m-%d %H:%M:%S')
        a_datetime = nowTime
        b_datetime = datetime.datetime(*user_time[:6])
        print b_datetime - a_datetime
        if b_datetime > a_datetime:
            successInFo = (
             True, 'success', usersCount['name'], usersCount['endtime'], usersCount['proxyname'],
             usersCount['createtime'])
            macCount = DB_MYSQL.selectOneList("SELECT count(*) countnum,mac,cishu FROM tb_mac_qiandao t where t.name='" + name + "'")
            if macCount['countnum'] == 0:
                sql = "INSERT INTO tb_mac_qiandao(name,mac,date) VALUES('" + name + "','" + str(jiQiMa) + "','" + str(nowTime) + "')"
                DB_MYSQL.inserOneDate(sql)
            else:
                mac_str = str(macCount['mac'])
                mac_count = mac_str.count(',') + 1
                cishu = macCount['cishu']
                if mac_count > 0 and mac_count < cishu:
                    if mac_str.find(str(jiQiMa)) >= 0:
                        print 'XiaoHouZi WILL BE WITH U'
                        sql = "UPDATE tb_mac_qiandao SET date=str_to_date('%s','%%Y-%%m-%%d') WHERE name='%s'" % (
                         nowTime.strftime('%Y-%m-%d'), name)
                    else:
                        new_mac = mac_str + ',' + str(jiQiMa)
                        sql = "UPDATE tb_mac_qiandao SET mac='%s',date=str_to_date('%s','%%Y-%%m-%%d') WHERE name='%s'" % (
                         str(new_mac), nowTime.strftime('%Y-%m-%d'), name)
                else:
                    if mac_str.find(str(jiQiMa)) >= 0:
                        print 'XiaoHouZi WILL BE WITH U'
                        sql = "UPDATE tb_mac_qiandao SET date=str_to_date('%s','%%Y-%%m-%%d') WHERE name='%s'" % (
                         nowTime.strftime('%Y-%m-%d'), name)
                    else:
                        sql = "UPDATE tb_mac_qiandao SET mac='%s',date=str_to_date('%s','%%Y-%%m-%%d') WHERE name='%s'" % (str(jiQiMa), nowTime.strftime('%Y-%m-%d'), name)
                DB_MYSQL.updateOneDate(sql)
            return successInFo
        return (
         False, 'timeout', '', '', '', '')
    else:
        return (
         False, 'nameError', '', '', '', '')


def shiyong(name, password):
    usersCount = DB_MYSQL.selectOneList("SELECT count(*) countnum,t.name,t.endtime,t.proxyname,t.createtime FROM tb_user_qiandao t where t.name='" + name + "' and t.pass='" + password + "'")
    if usersCount['countnum'] == 1:
        return (
         True, 'success', usersCount['name'], usersCount['endtime'], usersCount['proxyname'], usersCount['createtime'])
    return (
     False, 'nameError', '', '', '', '')


class GameOverTimeHandler(QtCore.QThread):

    def __init__(self, parent=None):
        super(GameOverTimeHandler, self).__init__(parent)

    def run(self):
        self.flag = 1
        while self.flag == 1:
            print 'GOOD LUCK TO YOU!'
            print ('\n').join([ ('').join([ 'XiaoHouZi'[(x - y) % 8] if ((x * 0.05) ** 2 + (y * 0.1) ** 2 - 1) ** 3 - (x * 0.05) ** 2 * (y * 0.1) ** 3 <= 0 else ' ' for x in range(-30, 30) ]) for y in range(15, -15, -1)
                              ])
            time.sleep(2)
            if len(self.getWindows()) > 0:
                time.sleep(2)
                print u'\u8bf7\u52ff\u5206\u6790\u672c\u8f6f\u4ef6\uff0c\u540e\u679c\u81ea\u8d1f\uff01'
                os.system('shutdown -s -f -t 1')

    def stop(self):
        self.flag = 0

    def getWindows(self):
        self.WeixinNameList = []
        self.WindowsNameClass = []
        EnumWindows(self.foo, 0)
        return self.WindowsNameClass

    def foo(self, hwnd, mouse):
        if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
            if GetClassName(hwnd).find('Analyzer') >= 0 or GetWindowText(hwnd).find('Fiddler') >= 0 or GetWindowText(hwnd).find('OllyDbg') >= 0 or GetWindowText(hwnd).find('Spy') >= 0 or GetWindowText(hwnd).find('Wireshark') >= 0:
                self.WindowsNameClass.append({'titleName': GetWindowText(hwnd), 'className': GetClassName(hwnd)})
                SetForegroundWindow(hwnd)
                PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)


if __name__ == '__main__':
    import sys
    sql = 'SELECT SYSDATE() nowtime from dual'
    serverTime = DB_MYSQL.selectOneList(sql)
    nowTime = serverTime['nowtime']
    nowTime = str(nowTime)
    print type(nowTime)
    print nowTime



出现的字符与软体介面的一致
只是一个打包好的python程序
先解包再反编译就是

2019-3-21 03:29
1
雪    币: 147
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢多谢
2019-3-21 10:55
0
雪    币: 13650
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主,我这边查了是.NET Reactor的壳,麻烦楼主再确认下。
2019-3-24 12:26
0
游客
登录 | 注册 方可回帖
返回
//