cpd

来源:互联网 发布:推荐几本好书 知乎 编辑:程序博客网 时间:2024/06/01 16:05

作者微信:15013593099 欢迎交流

// ygdpDlg.cpp : implementation file

//

#include "stdafx.h"
#include "ygdp.h"
#include "ygdpDlg.h"

#include <windowsx.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
int  ecxthis[]={
// 03335F00  6C8B849C  dChkData.6C8B849C
// 03335F04  .\.P.r.o.g.r.a.m. .F.i.l.e.s. .(.x.8.6.).\.C.o.o.l.p.a.d.D.o.w.n.l.o.a.d. .A.s.s.i.s.t.a.n.t..
// 03335F68  00000000
// 03335F6C  00000000
// 03335F70  00000000
// 03335F74  00000000
// 03335F78  00000000
// 03335F7C  00000000
// 03335F80  00000000
// 03335F84  00000000
// 03335F88  00000000
// 03335F8C  00000000
// 03335F90  00000000
// 03335F94  00000000
// 03335F98  00000000
// 03335F9C  00000000
// 03335FA0  00000000
// 03335FA4  00000000
// 03335FA8  00000000
// 03335FAC  00000000
// 03335FB0  00000000
// 03335FB4  00000000
// 03335FB8  00000000
// 03335FBC  00000000
// 03335FC0  00000000
// 03335FC4  00000000
// 03335FC8  00000000
// 03335FCC  00000000
// 03335FD0  00000000
// 03335FD4  00000000
// 03335FD8  00000000
// 03335FDC  00000000
// 03335FE0  00000004
// 03335FE4  0000EF17
// 03335FE8  03330090
// 03335FEC  03330090
// 03335FF0  03330038
// 03335FF4  03330038
// 03335FF8  03336000
// 03335FFC  0000A000
// 03336000  00000000
// 03336004  00000000
// 03336008  00000000
// 0333600C  00000000
// 03336010  00000000
// 03336014  00000000
// 03336018  00000000
// 0333601C  00000000
// 03336020  00000000
// 03336024  00000000
// 03336028  00000000
// 0333602C  00000000
// 03336030  00000000
// 03336034  00000000
// 03336038  00000000
// 0333603C  00000000
// 03336040  00000000
// 03336044  00000000
// 03336048  00000000
// 0333604C  00000000
// 03336050  00000000
// 03336054  00000000
// 03336058  00000000
// 0333605C  00000000
// 03336060  00000000
// 03336064  00000000
// 03336068  00000000
// 0333606C  00000000
// 03336070  00000000
// 03336074  00000000
// 03336078  00000000
// 0333607C  00000000
// 03336080  00000000
// 03336084  00000000
// 03336088  00000000
// 0333608C  00000000
// 03336090  00000000
// 03336094  00000000
// 03336098  00000000
// 0333609C  00000000
// 033360A0  00000000
// 033360A4  00000000
// 033360A8  00000000
// 033360AC  00000000
// 033360B0  00000000
// 033360B4  00000000
// 033360B8  00000000
// 033360BC  00000000
// 033360C0  00000000
// 033360C4  00000000
// 033360C8  00000000
// 033360CC  00000000
// 033360D0  00000000
// 033360D4  00000000
// 033360D8  00000000
// 033360DC  00000000
// 033360E0  00000000
// 033360E4  00000000
// 033360E8  00000000
// 033360EC  00000000
// 033360F0  00000000
// 033360F4  00000000
// 033360F8  00000000
// 033360FC  00000000
// 03336100  00000000
// 03336104  6C8B84C0  dChkData.6C8B84C0
// 03336108  6C8B84C8  dChkData.6C8B84C8
// 0333610C  6C8C0520  dChkData.6C8C0520
// 03336110  00000001
// 03336114  00000000
// 03336118  00000000
// 0333611C  00000000
// 03336120  00000000
// 03336124  00000000
// 03336128  00000000
// 0333612C  00000000
// 03336130  033313B0
// 03336134  00000000
// 03336138  00000000
// 0333613C  00000000
// 03336140  00000000
// 03336144  00000000
// 03336148  033313C0
// 0333614C  00000000
// 03336150  00000000
// 03336154  00000000
// 03336158  00000000
// 0333615C  00000000
// 03336160  6C8C0520  dChkData.6C8C0520
// 03336164  6C8C0520  dChkData.6C8C0520
// 03336168(616)  033362B8  UNICODE "D:\cpd\4.4.038.P1.141023.8297_C00.CPB"
// 0333616C  6C8C0520  dChkData.6C8C0520
// 03336170  (624)033313E0  UNICODE "8297_C00"
// 03336174  00000001
// 03336178  00000001
// 0333617C  00000000
// 03336180  00000000
// 03336184  00000000
// 03336188  00000000
// 0333618C  00000001
// 03336190  00000001
// 03336194  00000000
// 03336198  002546E0  Coolpad_.002546E0
// 0333619C  00000000
// 033361A0  00000000
// 033361A4(676)  00000000
// 033361A8  00000000
// 033361AC  00000000
// 033361B0  00000000
// 033361B4  00000000
// 033361B8  00000000
// 033361BC  00000000
// 033361C0  00000000
// 033361C4  00000000
// 033361C8  00000000
// 033361CC  00000000
// 033361D0  00000000
// 033361D4  00000000
// 033361D8  00000000
// 033361DC  00000000
// 033361E0  00000000
// 033361E4  00000000
// 033361E8  00000000
// 033361EC  00000000
// 033361F0  00000000
// 033361F4  00000000
// 033361F8  00000000
// 033361FC  00000000
// 03336200  00000000
// 03336204  00000000
// 03336208  00000000
// 0333620C  00000000
// 03336210  00000000
// 03336214  00000000
// 03336218  00000000
// 0333621C  00000000
// 03336220  00000000
// 03336224  6C8B0E48  dChkData.6C8B0E48
// 03336228  00000000
// 0333622C  00000000
// 03336230  00000000
// 03336234  00000000
// 03336238  00000000
// 0333623C  00000000
// 03336240  00000000
// 03336244  00000000
// 03336248  00000000
// 0333624C  00000000
// 03336250  00000000
// 03336254  00000000
// 03336258  00000000
// 0333625C  00000000
// 03336260  00000000
// 03336264  00000000
// 03336268  00000000
// 0333626C  00000000
// 03336270  00000000
// 03336274  00000000
// 03336278  00000000
// 0333627C  00000000
// 03336280  00000000
// 03336284  00000000
// 03336288  00000000
// 0333628C  00000000
// 03336290  00000000
// 03336294  00000000
// 03336298  00000000
// 0333629C  00000000
// 033362A0  42D2D3CC
// 033362A4  0C00EF7F
// 033362A8  6C8C050C  dChkData.6C8C050C
// 033362AC  00000025
// 033362B0  00000025
// 033362B4  00000001
// 033362B8  003A0044
// 033362BC  0063005C
// 033362C0  00640070
// 033362C4  0034005C
// 033362C8  0034002E
// 033362CC  0030002E
// 033362D0  00380033
// 033362D4  0050002E
// 033362D8  002E0031
// 033362DC  00340031
// 033362E0  00300031
// 033362E4  00330032
// 033362E8  0038002E
// 033362EC  00390032
// 033362F0  005F0037
// 033362F4  00300043
// 033362F8  002E0030
// 033362FC  00500043
// 03336300  00000042
// 03336304  00000000
// 03336308  D4D3D25A
// 0333630C  0000EF07
// 03336310  033300C4
// 03336314  033313A0
// 03336318  3030435F
// 0333631C  00000000
// 03336320  00000000
// 03336324  00000000
// 03336328  00000000
// 0333632C  00000000
// 03336330  00000000
// 03336334  2E342E34
// 03336338  2E383330
// 0333633C  312E3150
// 03336340  32303134
// 03336344  32382E33
// 03336348  435F3739
// 0333634C  00003030
// 03336350  00000000
// 03336354  00000000
// 03336358  00000000
// 0333635C  00000000
// 03336360  00000000
// 03336364  00000000
// 03336368  00000000
// 0333636C  00000000
// 03336370  00000000
// 03336374  3E19634D
// 03336378  0D5C0241
// 0333637C  1F3C451C
// 03336380  06610D2A
// 03336384  035B233E
// 03336388  03273B5B
// 0333638C  0E62360B
// 03336390  0B143722
// 03336394  13192D36
// 03336398  50541100
// 0333639C  510B6027
// 033363A0  4C27083D
// 033363A4  224F1E2B
// 033363A8  345A4659
// 033363AC  3A135818
// 033363B0  3115275F
// 033363B4  24142E24
// 033363B8  37453810
// 033363BC  42585005
// 033363C0  542A1C59
// 033363C4  49000000
// 033363C8  A8FE9448
// 033363CC  156EF0A4
// 033363D0  5788F47F
// 033363D4  5FC42AA2
// 033363D8  12AC8CFA
// 033363DC  7B757513
// 033363E0  9E444ECD
// 033363E4  B8266C2D
// 033363E8  DE7FE366
// 033363EC  1C0D2E01
// 033363F0  CE639FFE
// 033363F4  31ADAC80
// 033363F8  36EA641C
// 033363FC  F365781A
// 03336400  E3F1CA6F
// 03336404  F038EC5E
// 03336408  ED4415E1
// 0333640C  D042E6AC
    0
};
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
        // No message handlers
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CYgdpDlg dialog

CYgdpDlg::CYgdpDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CYgdpDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CYgdpDlg)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CYgdpDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CYgdpDlg)
    DDX_Control(pDX, IDC_LIST1, m_list);
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CYgdpDlg, CDialog)
    //{{AFX_MSG_MAP(CYgdpDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1startexe, OnBUTTON1startexe)
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
    ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
    ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
    ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
    ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
    ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CYgdpDlg message handlers
CYgdpDlg*  pCYgdpDlg=0;
BOOL CYgdpDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    pCYgdpDlg = this;

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);            // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    SetDlgItemText(IDC_EDIT1,"C:\\YLXZGJ\\YGDP2\\YGDP_Assembly.exe");
    
    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CYgdpDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CYgdpDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CYgdpDlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
char* getfile(const char* ext)
{
    //CFileDialog cf(TRUE);
    CFileDialog cf(TRUE,
        "exe Files (*exe)",
        NULL,
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,
        _T("exe Files (*.exe)|*.exe;)||"),
        NULL);
    
    int ok =cf.DoModal();
    if(ok==IDOK){
        CString cs;
        cs=cf.GetPathName();
        int len = cs.GetLength();
        char* cc=new char[len+1];
        strcpy(cc,cs);
        return cc;
    }
    return 0;
}

int get_syslistviews_lines( HWND hwndsyslistviews)
{
    int count = (int)::SendMessage(hwndsyslistviews,LVM_GETITEMCOUNT,0,0);
    return count;
}
void ListGetText(HWND hWnd, int row, int col, char* pSave, int sz)
{
    const int local_BUF_SIZE = 1024;
    DWORD dwProcess;
    HANDLE hProcess;
    char   buf[local_BUF_SIZE];
    LVITEM*   pItem = (LVITEM*)buf;
    
    pSave[0] = '\0';
    GetWindowThreadProcessId(hWnd,   &dwProcess);
    //   申请内存
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwProcess);
    LPLVITEM   pTemp = (LPLVITEM)VirtualAllocEx(hProcess, 0, local_BUF_SIZE, MEM_COMMIT, PAGE_READWRITE);
    memset(pItem, 0, local_BUF_SIZE);
    pItem->pszText = (char*)((char*)pTemp + sizeof(LVITEM));
    pItem->cchTextMax = local_BUF_SIZE - sizeof(LVITEM);
    pItem->iSubItem = col; //列
    pItem->mask = LVIF_TEXT;
    DWORD   dWord = 0;
    WriteProcessMemory(hProcess,   pTemp,   pItem,   local_BUF_SIZE, &dWord);
    int nChar = SendMessage(hWnd,
        LVM_GETITEMTEXT,
        (WPARAM)row, //行
        (LPARAM)pTemp);
    // printf("ListGetText read char count : %d\n", nChar);
    // 读数据
    ReadProcessMemory(hProcess,   (char*)pTemp+ sizeof(LVITEM),   pItem,  nChar, &dWord);
    //pItem->pszText   =   (char*)((char*)pItem   +   sizeof(LVITEM));
    //   释放内存
    VirtualFreeEx(hProcess,   pTemp,   local_BUF_SIZE,   MEM_RELEASE);
    CloseHandle(hProcess);
    sprintf(pSave, "%s", (char*)pItem);
}
int notify_brush(int id,int type,int progress,const char*text)
{
    CString csProgress;
    csProgress.Format("id=%d type=%d progress=%d: %s",id,type,progress,text);
    if(pCYgdpDlg){
        pCYgdpDlg->add(csProgress);
    }
    return 0;
}

int __stdcall startbrush(int notify,const char* cpb,const char* cpdlib,const char* phonetype)
{
    typedef int (__stdcall* startbrush_t)(int notify,const char* cpb,const char* cpdlib,const char* phonetype);
    HMODULE hmod=LoadLibrary("ygdpflash.dll");
    startbrush_t startbrushf=(startbrush_t)GetProcAddress(hmod,"startbrush");
    return startbrushf(notify,cpb,cpdlib,phonetype);
}
int __stdcall terminatebrush(int reserved)
{
    typedef int (__stdcall* terminatebrush_t)(int reserved);
    HMODULE hmod=LoadLibrary("ygdpflash.dll");
    terminatebrush_t terminatebrushf=(terminatebrush_t)GetProcAddress(hmod,"terminatebrush");
    return terminatebrushf(reserved);
}

int DebugBreakProcess(HANDLE processhandle)
{
    typedef BOOL (WINAPI *DebugBreakProcess_t)(  HANDLE Process);
    DebugBreakProcess_t DebugBreakProcess_1=(DebugBreakProcess_t)GetProcAddress(GetModuleHandle("Kernel32.dll"),"DebugBreakProcess");
    return DebugBreakProcess_1(processhandle);
    
}
int DebugActiveProcessStop(int pid)
{
    typedef BOOL (WINAPI* DebugActiveProcessStop_t)( DWORD dwProcessId);
    DebugActiveProcessStop_t DebugActiveProcessStop_1=(DebugActiveProcessStop_t)GetProcAddress(GetModuleHandle("Kernel32.dll"),"DebugActiveProcessStop");
    return DebugActiveProcessStop_1(pid);    
}
HANDLE processhandledebug = 0;
void delpid(int pid)
{
    HANDLE hproc = OpenProcess(PROCESS_TERMINATE,0,pid);
    if(hproc==0){
        return ;
    }
    int times = 0;
    while(!TerminateProcess(hproc,0)){
        times++;
        Sleep(100);
        if(times>10){
            break;
        }
    }
    CloseHandle(hproc);
}
DWORD  debugthread(int pid,HANDLE processhandle)
{
 
 
    DEBUG_EVENT debugevent={0};
    int firstchance = 0;
    while(1){
        if(!WaitForDebugEvent(&debugevent,-1)) continue;
        //afxmain()->m_debug.suspendthreadall(pid);//    debugout("EXCEPTION_SINGLE_STEP");
        switch(debugevent.dwDebugEventCode)
        {
        case CREATE_PROCESS_DEBUG_EVENT:
            processhandledebug = debugevent.u.CreateProcessInfo.hProcess;
            break;
        case CREATE_THREAD_DEBUG_EVENT:                
            break;
        case LOAD_DLL_DEBUG_EVENT:
            //debugout("LOAD_DLL_DEBUG_EVENT",debugevent.dwThreadId,debugevent.u.CreateThread.hThread);
            break;
        case UNLOAD_DLL_DEBUG_EVENT:
            break;
        case OUTPUT_DEBUG_STRING_EVENT:
            break;
        case EXIT_PROCESS_DEBUG_EVENT:
            break;
        case EXCEPTION_DEBUG_EVENT:
            switch(debugevent.u.Exception.ExceptionRecord.ExceptionCode)
            {
            case EXCEPTION_BREAKPOINT:    
                
                if(firstchance==0) {
                    firstchance=1;//firstchance++;
                    break;
                }else{
                    int a = DebugActiveProcessStop(debugevent.dwProcessId);
                    delpid(debugevent.dwProcessId);
                    break;
                }
                break;
                
            case EXCEPTION_SINGLE_STEP:    
                
                break;

            case EXCEPTION_ACCESS_VIOLATION:
                {                        
                    
                }
                break;
                
                
                
            default:
                break;
            }
            break;
            default:
                break;
        }
        //afxmain()->m_debug.restorallthread(pid);
        
        ContinueDebugEvent(debugevent.dwProcessId,debugevent.dwThreadId,DBG_CONTINUE);
    }
    //    ResumeThread(pi.hThread);
//    CloseHandle ( pi.hProcess );  
//    CloseHandle ( pi.hThread );  
    return true;        
}
DWORD __stdcall runCmdByThread(PVOID cmdstring)
{

        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        memset(&si,0,sizeof(STARTUPINFOA));
        GetStartupInfo(&si);
        si.cb = sizeof(STARTUPINFO);
        si.wShowWindow = SW_SHOW;
        si.dwFlags = STARTF_USESHOWWINDOW;    
        DWORD dwcreateflags = DEBUG_PROCESS;
        
        BOOL bRet = ::CreateProcess (   
            NULL,  
            (char*)cmdstring, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改    
            NULL,   
            NULL,   
            TRUE,   
            dwcreateflags,   
            NULL,   
            NULL,   
            &si,   
            &pi);   
        
        if(!bRet)       
        {  
//            OutputDebugStr("error on CreateProcess(%s) %s %d",cmdstring,__FILE__,__LINE__);
            return false;
        }
         //ResumeThread(pi.hThread);
        debugthread(pi.dwProcessId,pi.hProcess);
//         CloseHandle ( pi.hProcess );  
//         CloseHandle ( pi.hThread );  
        return true;        
}
void CYgdpDlg::OnBUTTON1startexe()
{
    // TODO: Add your control notification handler code here
//     HWND mainhwnd = ::FindWindowEx(0,0,"#32770","YGDP");
//     if(mainhwnd==0){
//         AfxMessageBox("ERROR FIND DIALOG YGDP");
//         return ;
//     }
//     HWND  login = ::FindWindowEx(mainhwnd,0,"Button","Login");
//     HWND  edit = ::FindWindowEx(mainhwnd,0,"Edit",0);
//
//     if(login==0||edit==0){
//         AfxMessageBox("ERROR FIND login or edit");
//         return ;
//     }
//
//     ::SendMessage(edit,WM_SETTEXT,0,(long)"369");
//      
//     ::SendMessage(login,BM_CLICK,0,0);
    CString path;
    GetDlgItemText(IDC_EDIT1,path);
//     if(!runcmd_simple(path)){
//         CString cs;
//         cs.Format("error runcmd_simple(%s)",path);
//         AfxMessageBox(cs);
//     }
    //startbrush((int)notify_brush,"D:\\cpd\\8085q\\0\\cpd0.cpb","C:\\YLXZGJ\\YGDP","8085q1");
}

int CYgdpDlg::add(const char *text)
{
    m_list.AddString(text);
    return 0;
}
int __stdcall pe_dll()
{
    typedef    int (__stdcall* pe_dll_t)(const char* pe,const char* dll,const char* fn);
    HMODULE hmod = LoadLibrary("cry_mfc.dll");
    pe_dll_t pedll=(pe_dll_t)GetProcAddress(hmod,"pe_dll");
    return pedll("C:\\YLXZGJ\\YGDP\\YGDP_Assembly.exe","dhookdown.dll","terminatebrush");
}

void CYgdpDlg::OnButton1()
{
    // TODO: Add your control notification handler code here
    add("pedll");
    pe_dll();
    add("finishpedll");
}
bool runcmd_simple(const char *cmdstring);

void CYgdpDlg::OnButton2()
{
    // TODO: Add your control notification handler code here
//    runcmd_simple("D:\\lgj\\SP_Flash_Tool_v5.1348.00mobile\\flash_tool.exe");
}
int runasadmin(const char* pe)
{
    //[HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/Layers]
    //"C://Program Files//win7test2.exe"="RUNASADMIN"
    HKEY hkey;
    long ret0=::RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\\",0,KEY_READ|KEY_WRITE,&hkey);
    if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
    {
        //AfxMessageBox("错误:无法打开有关的hKEY");
        return 0;
    }
    
    //查询有关的数据
    LPBYTE owner_Get=new BYTE[80];//定义用户姓名 owner_Get
    DWORD type_1=REG_SZ;//定义数据类型
    DWORD cbData_1=80;//定义数据长度
    
    
    long ret1=::RegSetValueEx(hkey,/*"D:\\miflash\\Debug\\mifalsh.exe"*/pe,NULL,REG_SZ,(BYTE*)"RUNASADMIN",strlen("RUNASADMIN")+1);
    if(ret1!=ERROR_SUCCESS)
    {
        //AfxMessageBox("错误:无法设置有关的注册表信息");
        return 0;
    }
    ::RegCloseKey(hkey);
    return 1;
}
int setcoopinstallpath(const char* path)
{
        //修改注册表,开机启动
        int return_value=0;
        HKEY hroot = HKEY_CURRENT_USER,hkey;
        const char *subkey = "Software\\Yulong\\YGDP\\3.83_Beta";
        DWORD dwDisposition;
        long result=RegCreateKeyEx(
            hroot,          
            subkey,         
            0,             
            NULL,             
            REG_OPTION_NON_VOLATILE,
            KEY_ALL_ACCESS,
            NULL,           
            &hkey,          
            &dwDisposition
            );
        
        if(result==ERROR_SUCCESS)
        {
            result=RegSetValueEx(
                hkey,             
                "Environment",    
                0,         
                REG_SZ,          
                (CONST BYTE *)"Assembly",
                (DWORD)strlen("Assembly")     
                );
            if(result!=ERROR_SUCCESS){
                return_value=-1;
            }
            result=RegSetValueEx(
                hkey,             
                "ProgramPath",    
                0,         
                REG_SZ,          
                (CONST BYTE *)path,
                (DWORD)strlen(path)     
                );
            if(result!=ERROR_SUCCESS){
                return_value=-1;
            }
             RegCloseKey(hkey);
        }else{
            return_value=-1;
        }
    
    return 1;
}
void CYgdpDlg::OnButton3()
{
    // TODO: Add your control notification handler code here
    CString path;
    GetDlgItemText(IDC_EDIT1,path);
    runasadmin(path);
    
}

void CYgdpDlg::OnButton4()
{
    // TODO: Add your control notification handler code here
    CString path;
    GetDlgItemText(IDC_EDIT1,path);
    char* ptr,*ptr2;
    ptr=(char*)(const char*)path;
    ptr2 = strrchr(ptr,'\\');
    ptr2[0]=0;
    setcoopinstallpath(ptr);
    
}

void CYgdpDlg::OnButton5()
{
    // TODO: Add your control notification handler code here
    char* ptr=getfile(0);
    SetDlgItemText(IDC_EDIT1,ptr);
    delete ptr;
}

int risepri()
{
    BOOL   rc;
    HANDLE   hToken;
    TOKEN_PRIVILEGES   *pTokenPriv;
    LUID_AND_ATTRIBUTES   la;
    DWORD   Len;
    rc=OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
    if(rc==FALSE)return   rc;
    LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&la.Luid);
    la.Attributes=SE_PRIVILEGE_ENABLED;
    pTokenPriv   =   new   TOKEN_PRIVILEGES[2];
    pTokenPriv-> PrivilegeCount=1;
    memcpy(pTokenPriv-> Privileges,&la,sizeof(LUID_AND_ATTRIBUTES));
    rc=AdjustTokenPrivileges(hToken,FALSE,pTokenPriv,0,NULL,&Len);
    return   rc;
}
void CYgdpDlg::OnButton6()
{
    // TODO: Add your control notification handler code here
    int pid=GetDlgItemInt(IDC_EDIT1);
    risepri();
    CreateThread(0,0,runCmdByThread,(void*)"notepad.exe",0,0);    
}

void CYgdpDlg::OnButton7()
{
    // TODO: Add your control notification handler code here
    int a = DebugBreakProcess(processhandledebug);
    CString cs;
    cs.Format("%d",a);
    AfxMessageBox(cs);    
}
int  unknown_libname_119_getparentvtabptr(void *pthis)
{
    return *(DWORD *)pthis - 16;
}
int  sub_1000AF90_getpvtabfnval(void *pthis)
{
    return *(DWORD *)(unknown_libname_119_getparentvtabptr(pthis) + 4);//[[ecx]-12]=8
}
int  unknown_libname_123_getvtable(void *pthis)
{
    return *(DWORD *)pthis;
}
wchar_t *__cdecl sub_1000A8D0_wcschr(const wchar_t *a1, wchar_t a2)
{
    return wcschr(a1, a2);
}
//pthis = 0341EB7C
//vptr=*pthis = 6CC5849C
//vptr-16[]={0x6CC59768,0x6CC11330,0x6CC3A0FB,0x6CC5971C,0x6CC114C0,0x6CC115D0};
signed int  sub_1000A220finstr(void *pthis, __int16 a2/*35*/, int a3/*0*/)
{
    signed int result; // eax@3
    int v4; // eax@4
    int v5; // [sp+0h] [bp-10h]@5
    void *v6; // [sp+4h] [bp-Ch]@1
    int v7; // [sp+8h] [bp-8h]@1
    int v8; // [sp+Ch] [bp-4h]@4
    
    v6 = pthis;
    v7 = sub_1000AF90_getpvtabfnval(pthis);//8      

    

    if ( a3 >= 0 && a3 < v7 )
    {
        v4 = unknown_libname_123_getvtable(v6);//[pthis]03B364F8

        v8 = sub_1000A8D0_wcschr((wchar_t *)(v4 + 2 * a3), a2);
        if ( v8 )
            v5 = (v8 - unknown_libname_123_getvtable(v6)) >> 1;
        else
            v5 = -1;
        result = v5;
    }
    else
    {
        result = -1;
    }
    return result;
}
int  sub_1000A160(void *pthis, int a2, int a3)
{
    int v3; // ST18_4@8
    void *v5; // [sp+0h] [bp-14h]@1
    int v6; // [sp+10h] [bp-4h]@5
    
//     v5 = pthis;
//     if ( a2 < 0 )
//         a2 = 0;
//     if ( a3 < 0 )
//         a3 = 0;
//     v6 = sub_1000AF90_getpvtabfnval(this);
//     if ( ATL::AtlAddThrow<int>(a3, a2) > v6 )
//         a3 = v6 - a2;
//     if ( a3 > 0 )
//     {
//         v3 = sub_1000A4B0(v5);
//         ATL::Checked::memmove_s(
//             (void *)(v3 + 2 * a2),
//             2 * (v6 - (a3 + a2) + 1),
//             (void *)(v3 + 2 * a2 + 2 * a3),
//             2 * (v6 - (a3 + a2) + 1));
//         sub_1000B550(v6 - a3);
//     }
    return sub_1000AF90_getpvtabfnval(v5);
}
int __cdecl sub_1000A920strcmpw(int a1, int a2)
{
//    a2=034144E0   03B364F8  UNICODE "8297_C00"
//    a1=    034144E4   03B362B0
        
 
    bool v2; // cf@2
    unsigned __int16 v5; // [sp+8h] [bp-Ch]@4
    int v6; // [sp+Ch] [bp-8h]@1
    int v7; // [sp+10h] [bp-4h]@1
    
    v7 = a2;
    v6 = a1;
    while ( 1 )
    {
        v2 = *(WORD *)v6 < *(WORD *)v7;
        if ( *(WORD *)v6 != *(WORD *)v7 )
            break;
        if ( !*(WORD *)v6 )
            return 0;
        v5 = *(WORD *)(v6 + 2);
        v2 = v5 < *(WORD *)(v7 + 2);
        if ( v5 != *(WORD *)(v7 + 2) )
            break;
        v6 += 4;
        v7 += 4;
        if ( !v5 )
            return 0;
    }
    return -v2 - (v2 - 1);
}
int sub_1000B970_printexit()
{
    return 0;
}
int sub_1000A100strcmpw(void *pthis, int a2)
{

    int v2; // eax@3
    void *v4; // [sp+0h] [bp-8h]@1
    
    v4 = pthis;
    if ( _CrtIsValidPointer(a2) == 0 )
        sub_1000B970_printexit(-2147467259);
    v2 = unknown_libname_123_getvtable(v4);
    return sub_1000A920strcmpw(v2, a2);//-1
}
void* sub_1000b260ascii2wchar(const char* pstringansi)
{
//                                        push    ebp
//                         mov     ebp, esp
//                      push    0               ; cchWideChar
//                     push    0               ; lpWideCharStr
//                      push    0FFFFFFFFh      ; cbMultiByte
//                      mov     eax, [ebp+lpMultiByteStr]
//                     push    eax             ; lpMultiByteStr
//                      push    0               ; dwFlags
//                      push    3             ; CodePage
//                      call    ds:MultiByteToWideChar
//                  sub     eax, 1
//                  pop     ebp
//                  retn
  return MultiByteToWideChar(3, 0, pstringansi, -1, 0, 0) - 1;
}
bool sub_1000B280(int a1)
{
    return *(DWORD *)(a1 + 12) > 1;
}
void __cdecl unknown_libname_115()
{
    sub_1000B970(-2147024882);
}
#define __thiscall __cdecl

char * sub_1000B7F0(void *pthis)
{
    char *result; // eax@1
    
    result = (char *)pthis + 12;
    if ( InterlockedDecrement((signed __int32 *)pthis + 3) <= 0 )
        result = (char *)(*(int (__thiscall **)(DWORD, DWORD))(**(DWORD **)pthis + 4))(*(DWORD *)pthis, pthis);
    return result;
}
int __thiscall sub_1000B730getoffset(void *pthis)
{
    return (int)((char *)pthis + 16);
}
int __thiscall unknown_libname_117(void *pthis, int a2)
{
    void *v2; // ST00_4@1
    int result; // eax@1
    
    v2 = pthis;
    result = sub_1000B730getoffset((void *)a2);//result=a2+16
    *(DWORD *)v2 = result;
    return result;
}

int sub_1000B2D0(int pthis,int size)
{
    int v2; // eax@1
    void *v3; // ST08_4@6
    void *v4; // eax@6
    int v6; // [sp+0h] [bp-1Ch]@4
    void *v7; // [sp+8h] [bp-14h]@1
    int v8; // [sp+Ch] [bp-10h]@1
    int v9; // [sp+10h] [bp-Ch]@1
    int v10; // [sp+14h] [bp-8h]@1
    
    v7 = pthis;
    v8 = unknown_libname_119_getparentvtabptr(pthis);
    v10 = *(DWORD *)(v8 + 4);
    v2 = (*(int (__thiscall **)(DWORD))(**(DWORD **)v8 + 16))(*(DWORD *)v8);
    v9 = (**(int (__thiscall ***)(DWORD, DWORD, DWORD))v2)(v2, size, 2);
    if ( !v9 )
        unknown_libname_115();
    if ( v10 >= size )
        v6 = size;
    else
        v6 = v10;
    v3 = (void *)sub_1000B730getoffset(v8);
    v4 = (void *)sub_1000B730getoffset(v9);
    wmemcpy_s(v4, v6 + 1, v3, v6 + 1);
    *(DWORD *)(v9 + 4) = v10;
    sub_1000B7F0((void *)v8);
    return unknown_libname_117(v7, v9);
}

int sub_1000B410(char* bufferaddress,int size)
{
    int result; // eax@4
    void *v3; // [sp+0h] [bp-Ch]@1
    signed int v4; // [sp+4h] [bp-8h]@6
    int v5; // [sp+4h] [bp-8h]@7
    int v6; // [sp+8h] [bp-4h]@1
    
    v3 = bufferaddress;
    v6 = unknown_libname_119_getparentvtabptr(bufferaddress);
    if ( *(DWORD *)(v6 + 4) > size )
        size = *(DWORD *)(v6 + 4);
    if ( (unsigned __int8)sub_1000B280(v6) )
    {
        result = sub_1000B2D0(size);
    }
    else
    {
        result = v6;
        if ( *(DWORD *)(v6 + 8) < size )
        {
            v4 = *(DWORD *)(v6 + 8);
            if ( v4 <= 1024 )
                v5 = 2 * v4;
            else
                v5 = v4 + 1024;
            if ( v5 < size )
                v5 = size;
            result = sub_1000B3A0(v3, v5);
        }
    }
    return result;

}
int sub_1000B500(char* bufferaddress,int size)
{
    int v2; // edx@1
    void *v4; // [sp+0h] [bp-10h]@1
    
    v4 = bufferaddress ;
    v2 = unknown_libname_119_getparentvtabptr(bufferaddress);
    if ( ((*(DWORD *)(v2 + 8) - size) | (1 - *(DWORD *)(v2 + 12))) < 0 )
        sub_1000B410(bufferaddress, size);
    return *(DWORD *)v4;

}
#define _DWORD DWORD
bool __thiscall sub_1000B570IsLocked(int pthis)
{
    return *(_DWORD *)(pthis + 12) < 0;
}
char *__thiscall sub_1000B730data(void *pthis)
{
    return (char *)pthis + 16;
}
int __thiscall sub_1000B8A0(int pthis)
{
    int result; // eax@1
    
    result = pthis + 12;
    InterlockedExchangeAdd((signed __int32 *)(pthis + 12), 1u);
    return result;
}

int sub_1000AAD0CloneData(int a1)
{
    int v1; // ST0C_4@6
    int v2; // ST08_4@6
    int v3; // ST04_4@6
    int v4; // eax@6
    int v6; // [sp+0h] [bp-8h]@1
    int v7; // [sp+4h] [bp-4h]@3
    
    v6 = (*(int (__thiscall **)(_DWORD))(**(_DWORD **)a1 + 16))(*(_DWORD *)a1);
    if ( (unsigned __int8)sub_1000B570IsLocked(a1) || v6 != *(_DWORD *)a1 )
    {
        v7 = (**(int (__thiscall ***)(_DWORD, _DWORD, _DWORD))v6)(v6, *(_DWORD *)(a1 + 4), 2);
        if ( !v7 )
            unknown_libname_115();
        *(_DWORD *)(v7 + 4) = *(_DWORD *)(a1 + 4);
        v1 = *(_DWORD *)(a1 + 4) + 1;
        v2 = sub_1000B730data((void *)a1);
        v3 = *(_DWORD *)(a1 + 4) + 1;
        v4 = sub_1000B730data((void *)v7);
        wmemcpy_s((void *)v4, v3, (const void *)v2, v1);
    }
    else
    {
        v7 = a1;
        sub_1000B8A0(a1);
    }
    return v7;
}
void *__thiscall sub_1000AB80(void *pbuffer, void *a2)
{
    void *v2; // ST04_4@1
    int v3; // ST0C_4@1
    int v4; // ST08_4@1
    
    v2 = pbuffer;
    v3 = unknown_libname_119_getparentvtabptr(a2);
    v4 = sub_1000AAD0CloneData(v3);
    unknown_libname_117(v2, v4);
    return v2;
}

void *__thiscall sub_1000ABC0(void *pbuffer, int a2)
{
    void *v2; // ST04_4@1
    
    v2 = pbuffer;
    sub_1000AB80(pbuffer, (void *)a2);
    return v2;
}




void* sub_1000B650operator_(char*bufferaddress,const char* pstringansi)
{
int v4= sub_1000b260ascii2wchar(pstringansi);//8
int v2 = sub_1000B500(bufferaddress, v4);
ATL::ChTraitsCRT<wchar_t>::ConvertToBaseType((LPWSTR)v2, v4, lpMultiByteStr, -1);
sub_1000B550(v5, v4);
}
_UNKNOWN *__cdecl sub_1001F496()
{
    return &unk_1005050C;
}

_UNKNOWN *__cdecl unknown_libname_118()
{
    return sub_1001F496();
}
int sub_1000B970(int errorcode)
{
//     
// sub_1000B970    proc near               ; CODE XREF: sub_1000A100+2A.p
// .text:1000B970                                         ; sub_1000A670+4A.p ...
// .text:1000B970
// .text:1000B970 arg_0           = dword ptr  8
// .text:1000B970
// .text:1000B970                 push    ebp
// .text:1000B971                 mov     ebp, esp
// .text:1000B973                 cmp     [ebp+arg_0], 8007000Eh
// .text:1000B97A                 jnz     short loc_1000B983
// .text:1000B97C                 call    sub_1001F3D0
// .text:1000B981 ; ---------------------------------------------------------------------------
// .text:1000B981                 jmp     short loc_1000B98C
// .text:1000B983 ; ---------------------------------------------------------------------------
// .text:1000B983
// .text:1000B983 loc_1000B983:                           ; CODE XREF: sub_1000B970+A.j
// .text:1000B983                 mov     eax, [ebp+arg_0]
// .text:1000B986                 push    eax             ; int
// .text:1000B987                 call    ?AfxThrowOleException@@YGXJ@Z ; AfxThrowOleException(long)
// .text:1000B98C ; ---------------------------------------------------------------------------
// .text:1000B98C
// .text:1000B98C loc_1000B98C:                           ; CODE XREF: sub_1000B970+11.j
// .text:1000B98C                 pop     ebp
// .text:1000B98D                 retn    4
// .text:1000B98D sub_1000B970    endp ; sp-analysis failed
}
void *__thiscall sub_1000B770(void *pthis, int a2)
{
    int v2; // ST0C_4@3
    void *v4; // [sp+0h] [bp-Ch]@1
    
    v4 = pthis;
    if ( !a2 )
        sub_1000B970(-2147467259);
    v2 = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)a2 + 12))(a2);
    unknown_libname_117(v4, v2);
    return v4;
}

void *__thiscall sub_1000B850(void *pthis)
{
    void *v1; // ST04_4@1
    int v2; // eax@1
    
    v1 = pthis;
    v2 = (int)unknown_libname_118();
    sub_1000B770(v1, v2);
    return v1;
}

int __cdecl sub_1000B9A0crc16(short *buffer, int size, short basecrc)
{
//    crc 16;
    return 0;
}
// Microsoft VisualC 2-10/net runtime
#define _BYTE BYTE
int __cdecl sub_10016060(int a1)
{
    int result; // eax@1
    int i; // [sp+0h] [bp-4h]@2
    
    result = a1;
    if ( *(_DWORD *)(a1 + 12) )
    {
        for ( i = 0; i < *(_DWORD *)a1; ++i )
            *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * i) = 0;
        free(*(void **)(a1 + 12));
        *(_DWORD *)(a1 + 12) = 0;
        *(_DWORD *)a1 = 0;
        *(_DWORD *)(a1 + 4) = 0;
        result = a1;
        *(_DWORD *)(a1 + 8) = 0;
    }
    return result;
}

int __cdecl sub_100123B0()
{
    dword_10052EDC = 576;
    sub_10016060(&unk_10052F00);
    return sub_10016060(&unk_10052EE0);
}

unsigned int __cdecl unknown_libname_20(unsigned int a1/*输出buffer*/, int a2/*输入buffer*/, unsigned int a3/*长度*/)
{
  int v3; // esi@1
  unsigned int v4; // edi@1
  unsigned int result; // eax@6
  unsigned int v6; // ecx@8
  int v7; // esi@26
  int v8; // edi@26
  unsigned int v9; // ecx@27

  v3 = a2;
  v4 = a1;
  if ( a1 > a2 && a1 < a2 + a3 )
  {
    v7 = a3 + a2 - 4;
    v8 = a3 + a1 - 4;
    if ( v8 & 3 )
    {
      if ( a3 >= 4 )
        JUMPOUT(__CS__, *((_DWORD *)unknown_libname_44 + (v8 & 3) + 1));
      switch ( a3 )
      {
        case 0u:
LABEL_34:
          result = a1;
          break;
        case 1u:
LABEL_35:
          *(_BYTE *)(v8 + 3) = *(_BYTE *)(v7 + 3);
          result = a1;
          break;
        case 2u:
LABEL_36:
          *(_BYTE *)(v8 + 3) = *(_BYTE *)(v7 + 3);
          *(_BYTE *)(v8 + 2) = *(_BYTE *)(v7 + 2);
          result = a1;
          break;
        case 3u:
          goto LABEL_37;
      }
    }
    else
    {
      v9 = a3 >> 2;
      if ( a3 >> 2 < 8 )
      {
        switch ( -v9 )
        {
          case 0:
            break;
        }
      }
      else
      {
        memcpy((void *)v8, (const void *)v7, 4 * v9);
        v7 += 4 * v9;
        v8 += 4 * v9;
      }
      switch ( a3 & 3 )
      {
        case 0u:
          goto LABEL_34;
        case 1u:
          goto LABEL_35;
        case 2u:
          goto LABEL_36;
        case 3u:
          break;
      }
LABEL_37:
      *(_BYTE *)(v8 + 3) = *(_BYTE *)(v7 + 3);
      *(_BYTE *)(v8 + 2) = *(_BYTE *)(v7 + 2);
      *(_BYTE *)(v8 + 1) = *(_BYTE *)(v7 + 1);
      result = a1;
    }
  }
  else
  {
    if ( a3 >= 0x100 && dword_10052FB4 && (v3 = a2, v4 = a1, (a1 & 0xF) == (a2 & 0xF)) )
    {
      result = _VEC_memcpy(a1, a2, a3);
    }
    else
    {
      if ( v4 & 3 )
      {
        if ( a3 >= 4 )
          JUMPOUT(__CS__, *((_DWORD *)unknown_libname_25 + (v4 & 3) + 1));
        JUMPOUT(__CS__, *((_DWORD *)unknown_libname_37 + a3 - 4));
      }
      v6 = a3 >> 2;
      if ( a3 >> 2 < 8 )
      {
        switch ( v6 )
        {
          case 0u:
            goto LABEL_10;
          case 1u:
            goto LABEL_21;
          case 2u:
            goto LABEL_20;
          case 3u:
            goto LABEL_19;
          case 4u:
            goto LABEL_18;
          case 5u:
            goto LABEL_17;
          case 6u:
            break;
          case 7u:
            *(_DWORD *)(v4 + 4 * v6 - 28) = *(_DWORD *)(v3 + 4 * v6 - 28);
            break;
        }
        *(_DWORD *)(v4 + 4 * v6 - 24) = *(_DWORD *)(v3 + 4 * v6 - 24);
LABEL_17:
        *(_DWORD *)(v4 + 4 * v6 - 20) = *(_DWORD *)(v3 + 4 * v6 - 20);
LABEL_18:
        *(_DWORD *)(v4 + 4 * v6 - 16) = *(_DWORD *)(v3 + 4 * v6 - 16);
LABEL_19:
        *(_DWORD *)(v4 + 4 * v6 - 12) = *(_DWORD *)(v3 + 4 * v6 - 12);
LABEL_20:
        *(_DWORD *)(v4 + 4 * v6 - 8) = *(_DWORD *)(v3 + 4 * v6 - 8);
LABEL_21:
        *(_DWORD *)(v4 + 4 * v6 - 4) = *(_DWORD *)(v3 + 4 * v6 - 4);
        v3 += 4 * v6;
        v4 += 4 * v6;
      }
      else
      {
        memcpy((void *)v4, (const void *)v3, 4 * v6);
        v3 += 4 * v6;
        v4 += 4 * v6;
      }
LABEL_10:
      switch ( a3 & 3 )
      {
        case 0u:
          result = a1;
          break;
        case 1u:
          *(_BYTE *)v4 = *(_BYTE *)v3;
          result = a1;
          break;
        case 2u:
          *(_BYTE *)v4 = *(_BYTE *)v3;
          *(_BYTE *)(v4 + 1) = *(_BYTE *)(v3 + 1);
          result = a1;
          break;
        case 3u:
          *(_BYTE *)v4 = *(_BYTE *)v3;
          *(_BYTE *)(v4 + 1) = *(_BYTE *)(v3 + 1);
          *(_BYTE *)(v4 + 2) = *(_BYTE *)(v3 + 2);
          result = a1;
          break;
      }
    }
  }
  return result;
}

int __cdecl sub_1001A4A0(int a1, unsigned int a2, int a3)
{
    int result; // eax@3
    int v4; // ST20_4@5
    signed int v5; // edx@16
    signed int v6; // [sp+0h] [bp-18h]@6
    int v7; // [sp+4h] [bp-14h]@6
    int v8; // [sp+4h] [bp-14h]@13
    int v9; // [sp+8h] [bp-10h]@6
    int v10; // [sp+8h] [bp-10h]@10
    signed int i; // [sp+Ch] [bp-Ch]@12
    int v12; // [sp+10h] [bp-8h]@13
    int v13; // [sp+14h] [bp-4h]@2
    
    if ( *(_DWORD *)(a3 + 4) < *(_DWORD *)a1 + 1 && (v13 = sub_10017DD0(a3, *(_DWORD *)a1 + 1)) != 0 )
    {
        result = v13;
    }
    else
    {
        if ( *(_DWORD *)(a1 + 8) == 1 )
        {
            *(_DWORD *)(a1 + 8) = 0;
            v4 = sub_10015E10(a1, a2, a3);
            *(_DWORD *)(a3 + 8) = 1;
            *(_DWORD *)(a1 + 8) = 1;
            sub_10016020(a3);
            result = v4;
        }
        else
        {
            v6 = *(_DWORD *)a3;
            v7 = *(_DWORD *)(a1 + 12);
            v9 = *(_DWORD *)(a3 + 12);
            if ( (*(_DWORD *)a1 != 1 || **(_DWORD **)(a1 + 12) > a2) && *(_DWORD *)a1 )
            {
                *(_DWORD *)(a3 + 8) = 0;
                *(_DWORD *)a3 = *(_DWORD *)a1;
                *(_DWORD *)v9 = *(_DWORD *)v7 - a2;
                v8 = v7 + 4;
                v12 = *(_DWORD *)v9 >> 31;
                *(_DWORD *)v9 &= 0xFFFFFFFu;
                v10 = v9 + 4;
                for ( i = 1; i < *(_DWORD *)a1; ++i )
                {
                    *(_DWORD *)v10 = *(_DWORD *)v8 - v12;
                    v8 += 4;
                    v12 = *(_DWORD *)v10 >> 31;
                    *(_DWORD *)v10 &= 0xFFFFFFFu;
                    v10 += 4;
                }
            }
            else
            {
                if ( *(_DWORD *)a1 == 1 )
                {
                    *(_DWORD *)v9 = a2 - *(_DWORD *)v7;
                    v10 = v9 + 4;
                }
                else
                {
                    *(_DWORD *)v9 = a2;
                    v10 = v9 + 4;
                }
                i = 1;
                *(_DWORD *)(a3 + 8) = 1;
                *(_DWORD *)a3 = 1;
            }
            while ( 1 )
            {
                v5 = i++;
                if ( v5 >= v6 )
                    break;
                *(_DWORD *)v10 = 0;
                v10 += 4;
            }
            sub_10016020(a3);
            result = 0;
        }
    }
    return result;
}

int __cdecl sub_10016020(int a1)
{
    int result; // eax@1
    
    while ( 1 )
    {
        result = a1;
        if ( *(_DWORD *)a1 <= 0 )
            break;
        result = a1;
        if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * *(_DWORD *)a1 - 4) )
            break;
        --*(_DWORD *)a1;
    }
    if ( !*(_DWORD *)a1 )
    {
        result = a1;
        *(_DWORD *)(a1 + 8) = 0;
    }
    return result;
}

int __cdecl sub_10016020(int a1)
{
    int result; // eax@1
    
    while ( 1 )
    {
        result = a1;
        if ( *(_DWORD *)a1 <= 0 )
            break;
        result = a1;
        if ( *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * *(_DWORD *)a1 - 4) )
            break;
        --*(_DWORD *)a1;
    }
    if ( !*(_DWORD *)a1 )
    {
        result = a1;
        *(_DWORD *)(a1 + 8) = 0;
    }
    return result;
}
#define __usercall
unsigned __int64 __usercall unknown_libname_106(unsigned __int64 a1, unsigned __int8 a2)
{
    unsigned __int64 result; // qax@2
    
    if ( a2 >= 0x40u )
        result = 0i64;
    else
        result = a1 >> a2;
    return result;
}

signed int __cdecl sub_10017DD0(int a1, signed int a2)
{
    void *v3; // [sp+0h] [bp-8h]@2
    int v4; // [sp+4h] [bp-4h]@4
    int v5; // [sp+14h] [bp+Ch]@2
    
    if ( *(_DWORD *)(a1 + 4) < a2 )
    {
        v5 = a2 + 64 - a2 % 32;
        v3 = realloc(*(void **)(a1 + 12), 4 * v5);
        if ( !v3 )
            return -2;
        *(_DWORD *)(a1 + 12) = v3;
        v4 = *(_DWORD *)(a1 + 4);
        *(_DWORD *)(a1 + 4) = v5;
        while ( v4 < *(_DWORD *)(a1 + 4) )
            *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * v4++) = 0;
    }
    return 0;
}

int __cdecl sub_10015E10(int a1, unsigned int a2, int a3)
{
    int result; // eax@3
    int v4; // ST1C_4@7
    int v5; // eax@17
    int v6; // [sp+0h] [bp-18h]@8
    int v7; // [sp+4h] [bp-14h]@8
    int v8; // [sp+4h] [bp-14h]@9
    signed int i; // [sp+8h] [bp-10h]@9
    int v10; // [sp+8h] [bp-10h]@12
    int v11; // [sp+Ch] [bp-Ch]@8
    int v12; // [sp+Ch] [bp-Ch]@9
    int v13; // [sp+Ch] [bp-Ch]@12
    int v14; // [sp+10h] [bp-8h]@2
    int v15; // [sp+14h] [bp-4h]@9
    
    if ( *(_DWORD *)(a3 + 4) < *(_DWORD *)a1 + 1 && (v14 = sub_10017DD0(a3, *(_DWORD *)a1 + 1)) != 0 )
    {
        result = v14;
    }
    else
    {
        if ( *(_DWORD *)(a1 + 8) != 1 || *(_DWORD *)a1 <= 1 && **(_DWORD **)(a1 + 12) < a2 )
        {
            v6 = *(_DWORD *)a3;
            *(_DWORD *)(a3 + 8) = 0;
            v7 = *(_DWORD *)(a1 + 12);
            v11 = *(_DWORD *)(a3 + 12);
            if ( *(_DWORD *)(a1 + 8) )
            {
                *(_DWORD *)a3 = 1;
                if ( *(_DWORD *)a1 == 1 )
                {
                    *(_DWORD *)v11 = a2 - **(_DWORD **)(a1 + 12);
                    v13 = v11 + 4;
                }
                else
                {
                    *(_DWORD *)v11 = a2;
                    v13 = v11 + 4;
                }
                v10 = 1;
            }
            else
            {
                *(_DWORD *)v11 = a2 + *(_DWORD *)v7;
                v8 = v7 + 4;
                v15 = *(_DWORD *)v11 >> 28;
                *(_DWORD *)v11 &= 0xFFFFFFFu;
                v12 = v11 + 4;
                for ( i = 1; i < *(_DWORD *)a1; ++i )
                {
                    *(_DWORD *)v12 = v15 + *(_DWORD *)v8;
                    v8 += 4;
                    v15 = *(_DWORD *)v12 >> 28;
                    *(_DWORD *)v12 &= 0xFFFFFFFu;
                    v12 += 4;
                }
                v10 = i + 1;
                *(_DWORD *)v12 = v15;
                v13 = v12 + 4;
                *(_DWORD *)a3 = *(_DWORD *)a1 + 1;
            }
            while ( 1 )
            {
                v5 = v10++;
                if ( v5 >= v6 )
                    break;
                *(_DWORD *)v13 = 0;
                v13 += 4;
            }
            sub_10016020(a3);
            result = 0;
        }
        else
        {
            *(_DWORD *)(a1 + 8) = 0;
            v4 = sub_1001A4A0(a1, a2, a3);
            *(_DWORD *)(a3 + 8) = 1;
            *(_DWORD *)(a1 + 8) = 1;
            sub_10016020(a3);
            result = v4;
        }
    }
    return result;
}

int __cdecl sub_100198F0(int a1, unsigned int a2, int a3)
{
    int result; // eax@3
    unsigned __int64 v4; // ST0C_8@6
    int v5; // ecx@6
    int v6; // eax@8
    int v7; // [sp+Ch] [bp-18h]@4
    int v8; // [sp+10h] [bp-14h]@4
    int v9; // [sp+14h] [bp-10h]@4
    int v10; // [sp+18h] [bp-Ch]@4
    int v11; // [sp+18h] [bp-Ch]@7
    int i; // [sp+1Ch] [bp-8h]@4
    int v13; // [sp+1Ch] [bp-8h]@7
    int v14; // [sp+20h] [bp-4h]@2
    
    if ( *(_DWORD *)(a3 + 4) < *(_DWORD *)a1 + 1 && (v14 = sub_10017DD0(a3, *(_DWORD *)a1 + 1)) != 0 )
    {
        result = v14;
    }
    else
    {
        v9 = *(_DWORD *)a3;
        *(_DWORD *)(a3 + 8) = *(_DWORD *)(a1 + 8);
        v7 = *(_DWORD *)(a1 + 12);
        v10 = *(_DWORD *)(a3 + 12);
        v8 = 0;
        for ( i = 0; i < *(_DWORD *)a1; ++i )
        {
            v4 = a2 * (unsigned __int64)*(_DWORD *)v7 + (unsigned int)v8;
            v7 += 4;
            *(_DWORD *)v10 = v4 & 0xFFFFFFF;
            v5 = v10 + 4;
            v10 += 4;
            LOBYTE(v5) = 28;
            v8 = unknown_libname_106(v5, HIDWORD(v4));
        }
        *(_DWORD *)v10 = v8;
        v11 = v10 + 4;
        v13 = i + 1;
        while ( 1 )
        {
            v6 = v13++;
            if ( v6 >= v9 )
                break;
            *(_DWORD *)v11 = 0;
            v11 += 4;
        }
        *(_DWORD *)a3 = *(_DWORD *)a1 + 1;
        sub_10016020(a3);
        result = 0;
    }
    return result;
}

int __cdecl sub_1001BAC0(int a1)
{
    int result; // eax@2
    int v2; // [sp+0h] [bp-8h]@1
    int i; // [sp+4h] [bp-4h]@1
    
    *(_DWORD *)(a1 + 8) = 0;
    *(_DWORD *)a1 = 0;
    v2 = *(_DWORD *)(a1 + 12);
    for ( i = 0; ; ++i )
    {
        result = i;
        if ( i >= *(_DWORD *)(a1 + 4) )
            break;
        *(_DWORD *)v2 = 0;
        v2 += 4;
    }
    return result;
}

signed int __cdecl sub_10019AB0(int a1, int *a2, signed int a3)
{
    signed int result; // eax@3
    char v4; // [sp+0h] [bp-14h]@10
    signed int v5; // [sp+8h] [bp-Ch]@5
    signed int i; // [sp+Ch] [bp-8h]@12
    int v7; // [sp+10h] [bp-4h]@17
    int v8; // [sp+10h] [bp-4h]@19
    
    sub_1001BAC0(a1);
    if ( a3 >= 2 && a3 <= 64 )
    {
        if ( *(_BYTE *)a2 == 45 )
        {
            a2 = (int *)((char *)a2 + 1);
            v5 = 1;
        }
        else
        {
            v5 = 0;
        }
        sub_1001BAC0(a1);
        while ( *(_BYTE *)a2 )
        {
            v4 = a3 >= 36 ? *(_BYTE *)a2 : (unsigned __int8)toupper(*(_BYTE *)a2);
            for ( i = 0; i < 64 && v4 != off_100500A8[0][i]; ++i )
                ;
            if ( i >= a3 )
                break;
            v7 = sub_100198F0(a1, a3, a1);
            if ( v7 )
                return v7;
            v8 = sub_10015E10(a1, i, a1);
            if ( v8 )
                return v8;
            a2 = (int *)((char *)a2 + 1);
        }
        if ( (*(_DWORD *)a1 == 0) != 1 )
            *(_DWORD *)(a1 + 8) = v5;
        result = 0;
    }
    else
    {
        result = -3;
    }
    return result;
}

signed int __cdecl sub_10017E80(int a1)
{
    //初始化 a1
//     a1[0]=0;
//     a1[1]=32;
//     a1[2]=0;
//     a1[3]=malloc(0x80);
//     a1[3]清0
    signed int result; // eax@2
    signed int i; // [sp+0h] [bp-4h]@3
    
    *(_DWORD *)(a1 + 12) = malloc(0x80u);
    if ( *(_DWORD *)(a1 + 12) )
    {
        for ( i = 0; i < 32; ++i )
            *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * i) = 0;
        *(_DWORD *)a1 = 0;
        *(_DWORD *)(a1 + 4) = 32;
        *(_DWORD *)(a1 + 8) = 0;
        result = 0;
    }
    else
    {
        result = -2;
    }
    return result;
}

int __cdecl sub_100122F0(int a1, int a2, int a3, int a4, int a5)
{
//     (int)&dword_10052EDC,
//         (int *)"C54F22A1B8EAA17432877F871613EFEA69327328005F35B25E27139A3EF12A93BA6FE9D391CDFD0D8B039C7EDF9579CB2ACCEDDF92EE6381CC4FEEB575E0FDAC2D5CA51D1077AB71",
//         (int *)"BEBC69833C7A8F6430785C8E8D0B170477A23A4F22E603EFBD08539DBC27C6DB335D68F04C8595374289EADAA418B83BB0930D30B0E69204F5005D3C79F8B2A73CFE458AF7B57573",
//         576,
//         16
    *(_DWORD *)a1 = a4;
    sub_10017E80(a1 + 4);

    sub_10017E80(a1 + 36);
    if ( a2 )
        sub_10019AB0(a1 + 4, a2, a5);
    if ( a3 )
        sub_10019AB0(a1 + 36, a3, a5);
    return 0;
}

int __cdecl sub_10012360()
{
    dword_10052EDC = 576;
    sub_10017E80(&unk_10052F00);
    sub_10017E80(&unk_10052EE0);
    return sub_100122F0(
        &dword_10052EDC,
        "C54F22A1B8EAA17432877F871613EFEA69327328005F35B25E27139A3EF12A93BA6FE9D391CDFD0D8B039C7EDF9579CB2ACCEDDF92EE6381CC4FEEB575E0FDAC2D5CA51D1077AB71",
        "BEBC69833C7A8F6430785C8E8D0B170477A23A4F22E603EFBD08539DBC27C6DB335D68F04C8595374289EADAA418B83BB0930D30B0E69204F5005D3C79F8B2A73CFE458AF7B57573",
        576,
        16);
}
signed int __cdecl sub_10017340(int a1, int a2, int a3, int a4)
{
    signed int result; // eax@2
    int v5; // [sp+0h] [bp-2Ch]@19
    char v6; // [sp+4h] [bp-28h]@8
    int v7; // [sp+14h] [bp-18h]@4
    char v8; // [sp+18h] [bp-14h]@4
    int v9; // [sp+28h] [bp-4h]@15
    
    if ( *(_DWORD *)(a3 + 8) == 1 )
    {
        result = -3;
    }
    else
    {
        if ( *(_DWORD *)(a2 + 8) == 1 )
        {
            v7 = sub_10017E80(&v8);
            if ( v7 )
            {
                result = v7;
            }
            else
            {
                v7 = sub_100180A0(a1, a3, &v8);
                if ( v7 )
                {
                    sub_10016060(&v8);
                    result = v7;
                }
                else
                {
                    v7 = sub_10017E80(&v6);
                    if ( v7 )
                    {
                        sub_10016060(&v8);
                        result = v7;
                    }
                    else
                    {
                        v7 = sub_10015D30(a2, &v6);
                        if ( v7 )
                        {
                            sub_100160E0(&v8, (unsigned int)&v6);
                            result = v7;
                        }
                        else
                        {
                            v7 = sub_10017340(&v8, &v6, a3, a4);
                            sub_100160E0(&v8, (unsigned int)&v6);
                            result = v7;
                        }
                    }
                }
            }
        }
        else
        {
            if ( sub_1001A170(a3) == 1 )
            {
                result = sub_1001BD40(a1, a2, a3, a4, 1);
            }
            else
            {
                v9 = sub_10017100(a3);
                if ( !v9 )
                    v9 = 2 * sub_1001A0C0(a3);
                v5 = *(_DWORD *)a3 > 0 && **(_DWORD **)(a3 + 12) & 1;
                if ( v5 == 1 || v9 )
                    result = sub_10017510(a1, a2, a3, a4, v9);
                else
                    result = sub_1001BD40(a1, a2, a3, a4, 0);
            }
        }
    }
    return result;
}

int __cdecl sub_100123E0(int a1, int a2, int a3)
{
    sub_10017340(a1, a3 + 36, a3 + 4, a2);
    return 0;
}

void *__cdecl sub_10012700(int a1, int a2, int a3, int a4)
{
    void *result; // eax@1
    char v5; // ST17_1@4



    char *v6; // [sp+Ch] [bp-254h]@3
    char v7; // [sp+10h] [bp-250h]@3
    char v8; // [sp+20h] [bp-240h]@1
    char v9; // [sp+21h] [bp-23Fh]@1
    int v10; // [sp+B8h] [bp-1A8h]@1
    int v11; // [sp+BCh] [bp-1A4h]@1
    char v12; // [sp+C0h] [bp-1A0h]@3
    char v13; // [sp+D0h] [bp-190h]@1
    char v14; // [sp+D1h] [bp-18Fh]@1
    int v15; // [sp+16Ch] [bp-F4h]@1
    char v16; // [sp+170h] [bp-F0h]@1
    char v17; // [sp+171h] [bp-EFh]@1
    int v18; // [sp+1B8h] [bp-A8h]@1
    int v19; // [sp+1BCh] [bp-A4h]@1
    char v20; // [sp+1C0h] [bp-A0h]@1
    char v21; // [sp+1C1h] [bp-9Fh]@1
    unsigned int v22; // [sp+258h] [bp-8h]@1
    int v23; // [sp+25Ch] [bp-4h]@1
    int v24; // [sp+260h] [bp+0h]@1
    
    v22 = (unsigned int)&v24 ^ __security_cookie;
    v16 = 0;
    memset(&v17, 0, 0x47u);
    v8 = 0;
    memset(&v9, 0, 0x90u);
    v20 = 0;
    memset(&v21, 0, 0x90u);
    v13 = 0;
    result = memset(&v14, 0, 0x90u);
    v18 = 0;
    v23 = 0;
    v19 = 0;
    v15 = 0;
    v11 = 0;
    v10 = 0;
    while ( v11 < a2 )
    {
        sub_10017E80(&v12);
        sub_10017E80(&v7);
        memset(&v8, 0, 0x91u);
        memset(&v20, 0, 0x91u);
        v18 = *(_BYTE *)(v11 + a1);
        sub_10012410(a1 + v11 + 1, v18, &v8, 145);
        v11 += v18 + 1;
        sub_10019AB0((int)&v12, (int *)&v8, 16);
        sub_100123E0(&v12, &v7, &dword_10052EDC);
        sub_1001B990(&v7, &v20, 16);
        v6 = &v20;
        do
        v5 = *v6++;
        while ( v5 );
        v15 = sub_10012510(&v20, v6 - &v21, &v13, 145);
        unknown_libname_20(v10 + a3, &v14, v15 - 1);
        v10 = v10 + v15 - 1;
        if ( !v15 )
        {
            sub_10016060(&v12);
            return (void *)sub_10016060(&v7);
        }
        *(_DWORD *)a4 = v15 + *(_DWORD *)a4 - 1;
        sub_10016060(&v7);
        result = (void *)sub_10016060(&v12);
    }
    return result;
}

// a2为buffer指针,a3为长度=80,a4,a5为返回值地址
//返回值*a5=64就对了
signed int __thiscall sub_100054D0(void *pthis, u_long *a2, unsigned int a3, int a4, int a5)
{
    signed int result; // eax@2
    u_long netlong; // [sp+4h] [bp-20Ch]@1
    char v7; // [sp+8h] [bp-208h]@3
    char v8; // [sp+9h] [bp-207h]@3
    char v9; // [sp+108h] [bp-108h]@3  
    char v10; // [sp+109h] [bp-107h]@3
    unsigned int v11; // [sp+20Ch] [bp-4h]@1
    int v12; // [sp+210h] [bp+0h]@1
    
    v11 = (unsigned int)&v12 ^ __security_cookie;
    sub_10012360(pthis);
    netlong = ntohl(*a2);
    if ( a3 >= netlong + 4 )
    {
        v9 = 0;
        memset(&v10, 0, 0xFFu);
        v7 = 0;
        memset(&v8, 0, 0xFFu);
        unknown_libname_20(&v9, a2 + 1, netlong);
        sub_10012700(&v9, netlong, &v7, a5);
        unknown_libname_20(a4, &v7, *(_DWORD *)a5);
        sub_100123B0();
        result = 1;
    }
    else
    {
        sub_100123B0();
        result = 0;
    }
    return result;
}

int sub_10004730cpdv8format(void *pthis, HANDLE hFile)
{
  int v3; // eax@10
  int v4; // ecx@17
  bool v5; // cf@21
  int v6; // [sp-10h] [bp-A6A0h]@17
  unsigned int v7; // [sp-Ch] [bp-A69Ch]@1
  int v8; // [sp+0h] [bp-A690h]@69
  int v9; // [sp+4h] [bp-A68Ch]@69
  DWORD v10; // [sp+8h] [bp-A688h]@62
  void *v11; // [sp+Ch] [bp-A684h]@36
  int v12; // [sp+10h] [bp-A680h]@27
  int v13; // [sp+14h] [bp-A67Ch]@25
  unsigned __int8 v14; // [sp+1Ah] [bp-A676h]@23
  unsigned __int8 v15; // [sp+1Bh] [bp-A675h]@21
  char *v16; // [sp+1Ch] [bp-A674h]@20
  char *v17; // [sp+20h] [bp-A670h]@20
  int v18; // [sp+24h] [bp-A66Ch]@17
  void *v19; // [sp+28h] [bp-A668h]@17
  unsigned int v20; // [sp+2Ch] [bp-A664h]@14
  char v21; // [sp+33h] [bp-A65Dh]@13
  char *v22; // [sp+34h] [bp-A65Ch]@12
  char *v23; // [sp+38h] [bp-A658h]@12
  void *v24; // [sp+3Ch] [bp-A654h]@1
  int v25; // [sp+40h] [bp-A650h]@73
  void *v26; // [sp+44h] [bp-A64Ch]@73
  void *v27; // [sp+48h] [bp-A648h]@35
  size_t v28; // [sp+4Ch] [bp-A644h]@35
  void *v29; // [sp+54h] [bp-A63Ch]@28
  int v30; // [sp+58h] [bp-A638h]@18
  void *v31; // [sp+5Ch] [bp-A634h]@18
  int *v32; // [sp+60h] [bp-A630h]@17
  int v33; // [sp+64h] [bp-A62Ch]@11
  void *v34; // [sp+68h] [bp-A628h]@11
  void *v35; // [sp+70h] [bp-A620h]@7
  void *v36; // [sp+78h] [bp-A618h]@3
  unsigned int j; // [sp+80h] [bp-A610h]@59
  DWORD NumberOfBytesRead; // [sp+84h] [bp-A60Ch]@5
  int v39; // [sp+8Ch] [bp-A604h]@8
  int v40; // [sp+90h] [bp-A600h]@29
  char v41; // [sp+94h] [bp-A5FCh]@29
  char v42; // [sp+95h] [bp-A5FBh]@29
  char v43; // [sp+114h] [bp-A57Ch]@64
  __int16 v44; // [sp+A114h] [bp-57Ch]@33
  __int16 v45; // [sp+A116h] [bp-57Ah]@33
  char v46; // [sp+A118h] [bp-578h]@1
  int v47; // [sp+A11Ch] [bp-574h]@31
  char *v48; // [sp+A120h] [bp-570h]@33
  LPVOID lpBuffer; // [sp+A124h] [bp-56Ch]@1
  int v50; // [sp+A128h] [bp-568h]@1
  char v51; // [sp+A12Ch] [bp-564h]@31
  unsigned __int8 v52; // [sp+A15Ch] [bp-534h]@33
  unsigned __int8 v53; // [sp+A15Dh] [bp-533h]@33
  unsigned __int8 v54; // [sp+A15Eh] [bp-532h]@33
  unsigned __int8 v55; // [sp+A15Fh] [bp-531h]@33
  unsigned __int8 v56; // [sp+A160h] [bp-530h]@33
  unsigned __int8 v57; // [sp+A161h] [bp-52Fh]@33
  int v58; // [sp+A164h] [bp-52Ch]@33
  int v59; // [sp+A168h] [bp-528h]@1
  int v60; // [sp+A16Ch] [bp-524h]@31
  int v61; // [sp+A170h] [bp-520h]@33
  int v62; // [sp+A178h] [bp-518h]@53
  char v63; // [sp+A17Ch] [bp-514h]@1
  DWORD nNumberOfBytesToRead; // [sp+A180h] [bp-510h]@5
  char Buffer; // [sp+A184h] [bp-50Ch]@33
  char v66; // [sp+A185h] [bp-50Bh]@33
  unsigned __int8 v67; // [sp+A18Ch] [bp-504h]@43
  char v68; // [sp+A18Dh] [bp-503h]@43
  int v69; // [sp+A208h] [bp-488h]@1
  int v70; // [sp+A20Ch] [bp-484h]@33
  int v71; // [sp+A210h] [bp-480h]@1
  wchar_t Dst; // [sp+A214h] [bp-47Ch]@1
  char v73; // [sp+A216h] [bp-47Ah]@1
  int v74; // [sp+A618h] [bp-78h]@33
  char v75; // [sp+A61Ch] [bp-74h]@53
  char v76; // [sp+A61Dh] [bp-73h]@53
  unsigned int v77; // [sp+A670h] [bp-20h]@1
  char v78; // [sp+A674h] [bp-1Ch]@1
  int v79; // [sp+A678h] [bp-18h]@1
  __int16 v80; // [sp+A67Ch] [bp-14h]@33
  int i; // [sp+A680h] [bp-10h]@57
  int v82; // [sp+A68Ch] [bp-4h]@1
  int v83; // [sp+A690h] [bp+0h]@1

  v77 = (unsigned int)&v83 ^ __security_cookie;
  v7 = (unsigned int)&v83 ^ __security_cookie;
  v24 = this;
  Dst = 0;
  memset(&v73, 0, 0x3FEu);
  sub_1000ABC0(&v63, (int)((char *)v24 + 616));//拷贝数据
  v82 = 0;
  sub_1000B850(&v78);//由全局变量unk_1005050C所指向的函数得到一个值
  LOBYTE(v82) = 1;
  v79 = 18;
  lpBuffer = 0;
  v71 = 0;
  v69 = 0;
  v50 = 0;
  v59 = 1;
  std::ios_base::ios_base(&v46);
  LOBYTE(v82) = 2;
  if ( hFile == (HANDLE)-1 )
  {
    sub_1000A790(&Dst, L"Fail to open CPB file!");
    sub_10001C40(1, 3, (unsigned int)&Dst);
    LOBYTE(v82) = 1;
    std::locale::facet::_facet(&v46);
    LOBYTE(v82) = 0;
    sub_1000B710(&v78);
    v82 = -1;
    sub_1000B710(&v63);
    return 0;
  }
  v36 = (void *)operator new(0x15Cu);
  lpBuffer = v36;
  if ( !v36 )
  {
    sub_10001C40(1, 3, (unsigned int)L"Fail to malloc head structure!");
    LOBYTE(v82) = 1;
    std::locale::facet::_facet(&v46);
    LOBYTE(v82) = 0;
    sub_1000B710(&v78);
    v82 = -1;
    sub_1000B710(&v63);
    return 0;
  }
  memset(lpBuffer, 0, 0x15Cu);
  nNumberOfBytesToRead = 344;
  SetFilePointer(hFile, 0, 0, 0);
  if ( !ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, &NumberOfBytesRead, 0)
    || NumberOfBytesRead != nNumberOfBytesToRead )
  {
    sub_10001C40(1, 3, (unsigned int)L"Fail to read file head !");
    v35 = lpBuffer;
    operator delete(lpBuffer);
    lpBuffer = 0;
    LOBYTE(v82) = 1;
    std::locale::facet::_facet(&v46);
    LOBYTE(v82) = 0;
    sub_1000B710(&v78);
    v82 = -1;
    sub_1000B710(&v63);
    return 0;
  }
  sub_1000B650operator_(&v78, (LPCSTR)lpBuffer + 4);//分配内存
  v39 = -1;
  v39 = sub_1000A220(&v78, 35, 0);//在v78里面找字符#
  if ( v39 != -1 )
    sub_1000A160(&v78, v39, 32);
  v3 = unknown_libname_123((char *)v24 + 624);//从this对象获取字符串指针
  if ( sub_1000A100(&v78, v3) )//手机类型和包的类型做比较
  {
    sub_1000A790(&Dst, L"the CPB file is not used for the chosen project!");
    sub_10001C40(1, 3, (unsigned int)&Dst);
    v59 = 0;
    v34 = lpBuffer;
    operator delete(lpBuffer);
    lpBuffer = 0;
    v33 = v59;
    LOBYTE(v82) = 1;
    std::locale::facet::_facet(&v46);
    LOBYTE(v82) = 0;
    sub_1000B710(&v78);
    v82 = -1;
    sub_1000B710(&v63);
    return v33;
  }
  v23 = (char *)v24 + 676;
  v22 = (char *)v24 + 677;
  do
    v21 = *v23++;
  while ( v21 );
  v20 = v23 - v22;//字符串长度
  if ( v23 == v22 )//字符串长度为0
  {
    strcpy_s((char *)v24 + 676, 0x20u, (const char *)lpBuffer + 4);//手机名字拷贝过去
    if ( v39 != -1 )
      *((_BYTE *)v24 + v39 + 676) = 0;//v39为长度
    sub_1000B650operator_(&v78, (LPCSTR)v24 + 676);//内存分配
    v6 = v4;
    v32 = &v6;
    v19 = sub_1000ABC0(&v6, (int)&v78);//拷贝
    v18 = sub_10008870(v6);//判断是否在机型库
    if ( !v18 )
    {
      v31 = lpBuffer;
      operator delete(lpBuffer);
      lpBuffer = 0;
      v30 = 0;
      LOBYTE(v82) = 1;
      std::locale::facet::_facet(&v46);
      LOBYTE(v82) = 0;
      sub_1000B710(&v78);
      v82 = -1;
      sub_1000B710(&v63);
      return v30;
    }
  }
  else
  {
    v17 = (char *)lpBuffer + 4;
    v16 = (char *)v24 + 676;
    //比较v16 v17字符串是否相等 如果不相等v13不为0
    while ( 1 )
    {
      v15 = *v16;
      v5 = v15 < *v17;
      if ( v15 != *v17 )
        break;
      if ( !v15 )
        goto LABEL_25;
      v14 = v16[1];
      v5 = v14 < v17[1];
      if ( v14 != v17[1] )
        break;
      v16 += 2;
      v17 += 2;
      if ( !v14 )
      {
LABEL_25:
        v13 = 0;
        goto LABEL_27;
      }
    }
    v13 = -v5 - (v5 - 1);
LABEL_27:
    v12 = v13;
    if ( v13 )//v16 v17字符串不相等
    {
      sub_10001C40(1, 3, (unsigned int)L"the CPB file is not used for the chosen project !!!");
      v29 = lpBuffer;
      operator delete(lpBuffer);
      lpBuffer = 0;
      LOBYTE(v82) = 1;
      std::locale::facet::_facet(&v46);
      LOBYTE(v82) = 0;
      sub_1000B710(&v78);
      v82 = -1;
      sub_1000B710(&v63);
      return 0;
    }
  }
  //字符串判断结束,是正确的
  v50 = sub_1000B9A0crc16(lpBuffer, nNumberOfBytesToRead - 4, v50);//计算crc
  v41 = 0;
  memset(&v42, 0, 0x7Fu);
  v40 = 0;
  sub_100054D0((char *)lpBuffer + 180, 80, &v41, &v40);
  if ( v40 == 64 )
  {
    unknown_libname_20(&v51, &v41, 60);
    v60 = 0;
    v60 = *(int *)((char *)&v40 + v40);
    v47 = sub_1000B9A0(&v51, v40 - 4, 0);
    if ( v60 == v47 )
    {
      v80 = v57 + v56 + v55 + v54 + v53 + v52;
      v44 = (unsigned __int16)(v57 + v56 + v55 + v54 + v53 + v52) / 5 - v55;
      v45 = (unsigned __int16)(v57 + v56 + v55 + v54 + v53 + v52) / 5 - v56;
      v70 = v58 - 344;
      Buffer = 0;
      memset(&v66, 0, 0x7Fu);
      v48 = 0;
      v61 = 0;
      v74 = 0;
      while ( v70 )
      {
        v28 = 140;
        v27 = (void *)operator new(0x8Cu);
        if ( v27 )
        {
          memset(v27, 0, v28);
          v11 = v27;
        }
        else
        {
          v11 = 0;
        }
        v69 = (int)v11;
        *((_DWORD *)v11 + 34) = 0;
        if ( !v69 )
        {
          v59 = 0;
          sub_10001C40(1, 3, (unsigned int)L"Fail to allocate the memory!");
          goto LABEL_71;
        }
        v61 = 9;
        if ( !ReadFile(hFile, &Buffer, 9u, &NumberOfBytesRead, 0) || NumberOfBytesRead != v61 )
        {
          v59 = 0;
          sub_10001C40(1, 3, (unsigned int)L"Fail to read the file list head!");
          goto LABEL_71;
        }
        v70 -= 9;
        v61 = v67;
        v48 = &v68;
        if ( !ReadFile(hFile, &v68, v67, &NumberOfBytesRead, 0) || NumberOfBytesRead != v61 )
        {
          v59 = 0;
          sub_10001C40(1, 3, (unsigned int)L"Fail to read the file list!!");
          goto LABEL_71;
        }
        v70 -= v61;
        v50 = sub_1000B9A0(&Buffer, v61 + 9, v50);
        unknown_libname_20(v69, &Buffer, v61 + 9);
        sub_10011E70(v69, v74, &v44, (char *)lpBuffer + 100);
        if ( v74 )
          *(_DWORD *)(v71 + 136) = v69;
        else
          *((_DWORD *)v24 + 200) = v69;
        v71 = v69;
        ++v74;
      }
      if ( v50 == *((_DWORD *)lpBuffer + 85) || v50 == *((_DWORD *)lpBuffer + 85) - 8 )
      {
        v62 = 0;
        v75 = 0;
        memset(&v76, 0, 0x4Fu);
        sub_100054D0((char *)lpBuffer + 260, 80, &v75, &v62);
        if ( v62 == 24 )
        {
          v60 = 0;
          v60 = sub_1000B9A0(&v75, 20, 0);
          v47 = *(int *)((char *)&v74 + v62);
          if ( v47 == v60 )
          {
            sub_100129D0((char *)v24 + 836);
            for ( i = *((_DWORD *)v24 + 200); i; i = *(_DWORD *)(i + 136) )
            {
              for ( j = *(_DWORD *)(i + 4); j; j -= nNumberOfBytesToRead )
              {
                if ( j <= 0xA000 )
                  v10 = j;
                else
                  v10 = 40960;
                nNumberOfBytesToRead = v10;
                if ( !ReadFile(hFile, &v43, v10, &NumberOfBytesRead, 0) || NumberOfBytesRead != nNumberOfBytesToRead )
                {
                  v59 = 0;
                  sub_10001C40(1, 3, (unsigned int)L"Fail to read the file data!");
                  goto LABEL_71;
                }
                sub_10014680((char *)v24 + 836, &v43, nNumberOfBytesToRead);
              }
            }
            sub_100147C0((char *)v24 + 836);
            v9 = strncmp(&v75, (const char *)v24 + 860, 20);
            v8 = v9;
            if ( v9 )
              v59 = 0;
          }
          else
          {
            v59 = 0;
            sub_10001C40(1, 3, (unsigned int)L"Check crc-data Error!");
          }
        }
        else
        {
          v59 = 0;
          sub_10001C40(1, 3, (unsigned int)L"Check cpb data error!");
        }
      }
      else
      {
        v59 = 0;
      }
    }
    else
    {
      v59 = 0;
      sub_10001C40(1, 3, (unsigned int)L"Fail to check the file head!!");
    }
  }
  else
  {
    v59 = 0;
    sub_10001C40(1, 3, (unsigned int)L"Fail to decrypte the CPB head content!");
  }
LABEL_71:
  if ( !v59 )
  {
    v6 = *((_DWORD *)v24 + 200);
    sub_1000C470(v6);
    *((_DWORD *)v24 + 200) = 0;
  }
  v26 = lpBuffer;
  operator delete(lpBuffer);
  lpBuffer = 0;
  v25 = v59;
  LOBYTE(v82) = 1;
  std::locale::facet::_facet(&v46);
  LOBYTE(v82) = 0;
  sub_1000B710(&v78);
  v82 = -1;
  sub_1000B710(&v63);
  return v25;
}

// 6C871784     8B4D D4            MOV ECX,DWORD PTR SS:[EBP-2C]
// 6C871787     E8 44050000        CALL dChkData.6C871CD0
// 6C87178C     8945 EC            MOV DWORD PTR SS:[EBP-14],EAX
signed int sub_10001CD0(void *pthis)
{
  int v2; // eax@3
  signed int v3; // ecx@16
  int v4; // edi@16
  LPVOID v5; // esi@16
  bool v6; // zf@16
  int v7; // ecx@37
  int v8; // [sp-Ch] [bp-4C8h]@37
  int v9; // [sp-8h] [bp-4C4h]@37
  unsigned int v10; // [sp-4h] [bp-4C0h]@1
  int v11; // [sp+8h] [bp-4B4h]@40
  int v12; // [sp+Ch] [bp-4B0h]@37
  int v13; // [sp+10h] [bp-4ACh]@29
  int v14; // [sp+14h] [bp-4A8h]@29
  int v15; // [sp+18h] [bp-4A4h]@27
  int v16; // [sp+1Ch] [bp-4A0h]@27
  int v17; // [sp+20h] [bp-49Ch]@23
  int v18; // [sp+24h] [bp-498h]@23
  int v19; // [sp+28h] [bp-494h]@21
  int v20; // [sp+2Ch] [bp-490h]@21
  int v21; // [sp+30h] [bp-48Ch]@14
  int v22; // [sp+34h] [bp-488h]@14
  int v23; // [sp+38h] [bp-484h]@13
  int v24; // [sp+3Ch] [bp-480h]@13
  int v25; // [sp+40h] [bp-47Ch]@10
  int v26; // [sp+44h] [bp-478h]@10
  void *v27; // [sp+48h] [bp-474h]@1
  int v28; // [sp+4Ch] [bp-470h]@47
  int v29; // [sp+50h] [bp-46Ch]@43
  int *v30; // [sp+54h] [bp-468h]@37
  void *v31; // [sp+58h] [bp-464h]@31
  void *v32; // [sp+5Ch] [bp-460h]@30
  void *v33; // [sp+60h] [bp-45Ch]@28
  void *v34; // [sp+64h] [bp-458h]@25
  void *v35; // [sp+68h] [bp-454h]@24
  void *v36; // [sp+6Ch] [bp-450h]@22
  void *v37; // [sp+70h] [bp-44Ch]@20
  void *v38; // [sp+74h] [bp-448h]@15
  void *v39; // [sp+78h] [bp-444h]@11
  void *v40; // [sp+7Ch] [bp-440h]@7
  void *v41; // [sp+80h] [bp-43Ch]@5
  DWORD NumberOfBytesRead; // [sp+84h] [bp-438h]@5
  LPVOID lpBuffer; // [sp+88h] [bp-434h]@5
  int v44; // [sp+8Ch] [bp-430h]@37
  HANDLE hFile; // [sp+90h] [bp-42Ch]@3
  char v46; // [sp+94h] [bp-428h]@37
  int v47; // [sp+98h] [bp-424h]@1
  int v48; // [sp+9Ch] [bp-420h]@1
  int v49; // [sp+A0h] [bp-41Ch]@1
  int v50; // [sp+A4h] [bp-418h]@8
  wchar_t Dst; // [sp+A8h] [bp-414h]@1
  char v52; // [sp+AAh] [bp-412h]@1
  unsigned int v53; // [sp+4A8h] [bp-14h]@1
  int v54; // [sp+4ACh] [bp-10h]@1
  int v55; // [sp+4B8h] [bp-4h]@37
  int v56; // [sp+4BCh] [bp+0h]@1

  v53 = (unsigned int)&v56 ^ __security_cookie;
  v10 = (unsigned int)&v56 ^ __security_cookie;
  v27 = this;
  v48 = 1;
  v47 = 1;
  v49 = 1;
  Dst = 0;
  memset(&v52, 0, 0x3FEu);
  v54 = 0;
  sub_1000A790(&Dst, L"Checking CPB file... ");
  sub_10001C40(1, 1, (unsigned int)&Dst);
  if ( sub_1000A4F0((char *)v27 + 616) )
  {
    sub_1000A790(&Dst, L"CPB file is not exist!");
    sub_10001C40(v47, 3, (unsigned int)&Dst);
    return 0;
  }
  v2 = unknown_libname_123((char *)v27 + 616);
  hFile = CreateFileW((LPCWSTR)v2, 0x80000000u, 1u, 0, 3u, 0x80u, 0);
  if ( hFile == (HANDLE)-1 )
  {
    sub_1000A790(&Dst, L"Fail to open CPB file!");
    sub_10001C40(v47, 3, (unsigned int)&Dst);
    return 0;
  }
  NumberOfBytesRead = 0;
  v41 = operator new__(0x200u);
  lpBuffer = v41;
  memset(v41, 0, 0x200u);
  SetFilePointer(hFile, 0, 0, 0);
  if ( !ReadFile(hFile, v41, 0x200u, &NumberOfBytesRead, 0) || NumberOfBytesRead != 512 )
  {
    v49 = 3;
    sub_1000A790(&Dst, L"Fail to check CPB head structure!");
    sub_10001C40(v47, v49, (unsigned int)&Dst);
    v40 = lpBuffer;
    operator delete(lpBuffer);
    return 0;
  }
  sub_10001C40(1, 1, (unsigned int)L"Get CPB version ...");
  v50 = sub_1000A4B0((char *)v27 + 624);
  sub_1000AF40((char *)v27 + 624, -1);
  if ( sub_10011780(v50) )
  {
    if ( *(_DWORD *)lpBuffer != unk_10045CFC && (v26 = strncmp((const char *)lpBuffer, "YLCP", 4), (v25 = v26) != 0) )
    {
      if ( *(_DWORD *)lpBuffer != unk_10045D0C
        && (v24 = strncmp((const char *)lpBuffer, (const char *)&unk_10045D14, 4), (v23 = v24) != 0)
        && (v22 = strncmp((const char *)lpBuffer, (const char *)&unk_10045D1C, 4), (v21 = v22) != 0) )
      {
        v3 = 11;
        v4 = (int)"Marvell_FBF";
        v5 = lpBuffer;
        v6 = 1;
        do
        {
          if ( !v3 )
            break;
          v6 = *(_BYTE *)v5++ == *(_BYTE *)v4++;
          --v3;
        }
        while ( v6 );
        if ( v6 )
        {
          v37 = lpBuffer;
          operator delete(lpBuffer);
          return 1;
        }
        v20 = strncmp((const char *)lpBuffer, (const char *)&unk_10045D30, 4);
        v19 = v20;
        if ( v20 )
        {
          v18 = strncmp((const char *)lpBuffer, (const char *)&unk_10045D38, 4);// 1.8
          v17 = v18;
          if ( v18 )
          {
            v49 = 3;
            sub_1000A790(&Dst, L"The version of CPB don't support been downloaded!");
            sub_10001C40(v47, v49, (unsigned int)&Dst);
            v34 = lpBuffer;
            operator delete(lpBuffer);
            return 0;
          }
          v35 = lpBuffer;
          operator delete(lpBuffer);
          v48 = sub_10004730(v27, hFile);       // 1.8
          *((_DWORD *)v27 + 195) = 2;
        }
        else                                    // 1.7
        {
          v36 = lpBuffer;
          operator delete(lpBuffer);
          v48 = sub_10003BA0(hFile);            // 1.7
          *((_DWORD *)v27 + 195) = 1;
        }
      }
      else
      {
        v38 = lpBuffer;
        operator delete(lpBuffer);
        v48 = sub_10003100(hFile);
        *((_DWORD *)v27 + 195) = 1;
      }
    }
    else
    {
      v39 = lpBuffer;
      operator delete(lpBuffer);
      v48 = sub_100026A0(hFile);
      *((_DWORD *)v27 + 195) = 0;
    }
  }
  else
  {
    v16 = strncmp((const char *)lpBuffer, (const char *)&unk_10045DA4, 4);// 1.7
    v15 = v16;
    if ( v16 )
    {
      v14 = strncmp((const char *)lpBuffer, (const char *)&unk_10045DAC, 4);// 1.8
      v13 = v14;
      if ( v14 )
      {
        v49 = 3;
        sub_1000A790(&Dst, L"The version of CPB don't support been downloaded!!");
        sub_10001C40(v47, v49, (unsigned int)&Dst);
        v31 = lpBuffer;
        operator delete(lpBuffer);
        return 0;
      }
      v32 = lpBuffer;
      operator delete(lpBuffer);
      v48 = sub_10004730(v27, hFile);           // 1.8头部数据校验
      *((_DWORD *)v27 + 195) = 2;
    }
    else
    {
      v33 = lpBuffer;
      operator delete(lpBuffer);
      v48 = sub_10003BA0(hFile);                // 1.7头部数据校验
      *((_DWORD *)v27 + 195) = 1;
    }
  }
  if ( !v48 )
  {
    CloseHandle(hFile);
    hFile = 0;
    return 0;
  }
  if ( v48 && *((_DWORD *)v27 + 194) )
  {
    sub_10001C40(1, 1, (unsigned int)L"Unzip files ...");
    // 解压文件
    v48 = sub_100055E0(hFile);
  }
  sub_1000A790(&Dst, L"Get FileList File... ");
  sub_10001C40(v47, v49, (unsigned int)&Dst);
  v48 = sub_100066A0(v27);                      // 抽取文件
  std::ios_base::ios_base(&v46);
  v55 = 0;
  sub_1000AEA0(&unk_10045E6C);
  LOBYTE(v55) = 1;
  sub_1000B230((int)&v44, L"%s\\%s", (_BYTE)v27 + 4);
  v9 = 0;
  v8 = v7;
  v30 = &v8;
  v12 = sub_1000AEA0(L"PhoneInfo.yl");
  sub_10011A60(&v44, v8, v9);
  if ( v48 )
  {
    if ( *((_DWORD *)v27 + 206) )
    {
      sub_10001C40(1, 1, (unsigned int)L"Unzip police files ...");
      v48 = sub_10007CD0(hFile);
    }
  }
  v11 = *((_DWORD *)v27 + 195);
  if ( v11 )
  {
    if ( v11 == 1 )
    {
      v9 = *((_DWORD *)v27 + 199);
      sub_1000C410(v9);
    }
    else
    {
      if ( v11 != 2 )
      {
        v29 = 0;
        LOBYTE(v55) = 0;
        sub_1000B710(&v44);
        v55 = -1;
        std::locale::facet::_facet(&v46);
        return v29;
      }
      v9 = *((_DWORD *)v27 + 200);
      sub_1000C470(v9);
    }
  }
  else
  {
    v9 = *((_DWORD *)v27 + 198);
    sub_1000C3B0(v9);
  }
  CloseHandle(hFile);
  hFile = 0;
  v28 = v48;
  LOBYTE(v55) = 0;
  sub_1000B710(&v44);
  v55 = -1;
  std::locale::facet::_facet(&v46);
  return v28;
}
// 010FBB6E   |.  FF70 58          PUSH DWORD PTR DS:[EAX+58]
// 010FBB71   |.  FF50 54          CALL DWORD PTR DS:[EAX+54]

// 010F49CE   |.  FF55 FC          CALL DWORD PTR SS:[EBP-4]

// 6A661406     B9 0CAC6E6A        MOV ECX,dAndroid.6A6EAC0C
// 6A66140B     E8 40FEFFFF        CALL dAndroid.6A661250

// 6A661260     6A 00              PUSH 0
// 6A661262     8B4D FC            MOV ECX,DWORD PTR SS:[EBP-4]
// 6A661265     8B49 04            MOV ECX,DWORD PTR DS:[ECX+4]
// 6A661268     E8 93040000        CALL dAndroid.6A661700


// 6A661809     83C4 0C            ADD ESP,0C
// 6A66180C     8BB5 ACF7FFFF      MOV ESI,DWORD PTR SS:[EBP-854]
// 6A661812     83C6 08            ADD ESI,8
// 6A661815     8BBD ACF7FFFF      MOV EDI,DWORD PTR SS:[EBP-854]
// 6A66181B     81C7 C8000000      ADD EDI,0C8
// 6A661821     B9 0E000000        MOV ECX,0E
// 6A661826     F3:A5              REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
// 6A661828     8B95 ACF7FFFF      MOV EDX,DWORD PTR SS:[EBP-854]
// 6A66182E     8B85 ACF7FFFF      MOV EAX,DWORD PTR SS:[EBP-854]
// 6A661834     8B48 40            MOV ECX,DWORD PTR DS:[EAX+40]
// 6A661837     898A C4000000      MOV DWORD PTR DS:[EDX+C4],ECX
// 6A66183D     8B95 ACF7FFFF      MOV EDX,DWORD PTR SS:[EBP-854]
// 6A661843     83C2 54            ADD EDX,54
// 6A661846     52                 PUSH EDX
// 6A661847     8B85 ACF7FFFF      MOV EAX,DWORD PTR SS:[EBP-854]
// 6A66184D     8B48 04            MOV ECX,DWORD PTR DS:[EAX+4]
// 6A661850     8B95 ACF7FFFF      MOV EDX,DWORD PTR SS:[EBP-854]
// 6A661856     8B42 04            MOV EAX,DWORD PTR DS:[EDX+4]
// 6A661859     8B11               MOV EDX,DWORD PTR DS:[ECX]
// 6A66185B     8BC8               MOV ECX,EAX
// 6A66185D     8B42 04            MOV EAX,DWORD PTR DS:[EDX+4]
// 6A661860     FFD0               CALL EAX

signed int __thiscall sub_100015D0(void *pthis, wchar_t *Dst)
{
  signed int result; // eax@2
  void *v3; // [sp+4h] [bp-2Ch]@1
  signed int v4; // [sp+1Ch] [bp-14h]@1
  int v5; // [sp+20h] [bp-10h]@1
  int v6; // [sp+2Ch] [bp-4h]@1

  v3 = this;
  v4 = 1;
  sub_1000B850(&v5);
  v6 = 0;
  if ( sub_10001980(v3, (int)(Dst + 58)) )
  {
    if ( sub_10001C20(*((_DWORD *)Dst + 28)) )
    {
      if ( sub_1000C4D0((char *)v3 + 4) )
      {
        if ( *((_DWORD *)v3 + 158) || *((_DWORD *)v3 + 159) || *((_DWORD *)v3 + 160) || *((_DWORD *)v3 + 161) )
        {
          if ( *((_DWORD *)v3 + 158) )
          {
            sub_10001C40(1, 1, (unsigned int)L"Start to verify CPB file ...");
            if ( unknown_libname_116((char *)v3 + 804) )
              sub_1000B6D0((char *)v3 + 804);
            v4 = sub_10001CD0(v3);
            *((_DWORD *)v3 + 193) = unknown_libname_116((char *)v3 + 804) != 0;
            if ( *((_DWORD *)v3 + 193) )
            {
              while ( v4 && unknown_libname_116((char *)v3 + 804) )
              {
                ATL::CStringT<wchar_t_StrTraitMFC<wchar_t_ATL::ChTraitsCRT<wchar_t>>>::operator_((LPCSTR)v3 + 676);
                sub_1000E7B0(0);
                sub_1000B230((int)((char *)v3 + 616), L"%s\\%s\\%s\\%s", (_BYTE)v3 + 4);
                *((_DWORD *)v3 + 194) = 0;
                v4 = sub_10001CD0(v3);
                _LN24_3(0, 1);
              }
            }
            if ( v4 )
              sub_10001C40(1, 2, (unsigned int)L"Check CPB file ok");
          }
          if ( v4 )
          {
            if ( *((_DWORD *)v3 + 159) )
            {
              sub_10001C40(2, 1, (unsigned int)L"Start to verify GPS file ...");
              v4 = sub_10008030(v3);
              if ( v4 )
                sub_10001C40(2, 2, (unsigned int)L"Check GPS file ok");
            }
          }
          if ( v4 )
          {
            if ( *((_DWORD *)v3 + 160) )
            {
              sub_10001C40(3, 1, (unsigned int)L"Start to verify RES file ...");
              v4 = unknown_libname_2(v3);
              if ( v4 )
                sub_10001C40(3, 2, (unsigned int)L"Check RES file ok");
            }
          }
          if ( v4 )
          {
            if ( *((_DWORD *)v3 + 161) )
            {
              sub_10001C40(4, 1, (unsigned int)L"Start to verify APP file ...");
              v4 = unknown_libname_2(v3);
              if ( v4 )
                sub_10001C40(4, 2, (unsigned int)L"Check APP file ok");
            }
          }
          if ( v4 )
            v4 = sub_10001B00(Dst);
          v6 = -1;
          sub_1000B710(&v5);
          result = v4;
        }
        else
        {
          sub_10001C40(0, 3, (unsigned int)L"Please config your downloader task!");
          v6 = -1;
          sub_1000B710(&v5);
          result = 0;
        }
      }
      else
      {
        sub_10001C40(0, 3, (unsigned int)L"Get App Path fail");
        v6 = -1;
        sub_1000B710(&v5);
        result = 0;
      }
    }
    else
    {
      sub_10001C40(0, 3, (unsigned int)L"Set callback function fail");
      v6 = -1;
      sub_1000B710(&v5);
      result = 0;
    }
  }
  else
  {
    sub_10001C40(0, 3, (unsigned int)L"Set check config fail");
    v6 = -1;
    sub_1000B710(&v5);
    result = 0;
  }
  return result;
}

int __thiscall sub_10008870(void *pthis, int a2)
{
  int v2; // eax@3
  int v4; // ecx@5
  int v5; // ecx@9
  int v6; // ecx@11
  int v7; // eax@21
  int v8; // eax@21
  void *v9; // ecx@22
  void *v10; // ecx@24
  void *v11; // ecx@26
  int v12; // eax@31
  __int32 v13; // eax@31
  int v14; // eax@31
  __int32 v15; // eax@31
  int v16; // eax@31
  __int32 v17; // eax@31
  int v18; // [sp-20h] [bp-AC8h]@5
  void *v19; // [sp-1Ch] [bp-AC4h]@5
  char *v20; // [sp-18h] [bp-AC0h]@5
  char *v21; // [sp-14h] [bp-ABCh]@5
  char *v22; // [sp-10h] [bp-AB8h]@5
  char *v23; // [sp-Ch] [bp-AB4h]@5
  int v24; // [sp-8h] [bp-AB0h]@5
  unsigned int v25; // [sp-4h] [bp-AACh]@1
  int v26; // [sp+0h] [bp-AA8h]@26
  int v27; // [sp+4h] [bp-AA4h]@26
  int v28; // [sp+8h] [bp-AA0h]@26
  int v29; // [sp+Ch] [bp-A9Ch]@26
  void *v30; // [sp+10h] [bp-A98h]@26
  void *v31; // [sp+14h] [bp-A94h]@26
  int v32; // [sp+18h] [bp-A90h]@24
  int v33; // [sp+1Ch] [bp-A8Ch]@24
  int v34; // [sp+20h] [bp-A88h]@24
  int v35; // [sp+24h] [bp-A84h]@24
  void *v36; // [sp+28h] [bp-A80h]@24
  void *v37; // [sp+2Ch] [bp-A7Ch]@24
  int v38; // [sp+30h] [bp-A78h]@22
  int v39; // [sp+34h] [bp-A74h]@22
  int v40; // [sp+38h] [bp-A70h]@22
  int v41; // [sp+3Ch] [bp-A6Ch]@22
  void *v42; // [sp+40h] [bp-A68h]@22
  void *v43; // [sp+44h] [bp-A64h]@22
  int v44; // [sp+48h] [bp-A60h]@11
  int v45; // [sp+4Ch] [bp-A5Ch]@11
  int v46; // [sp+50h] [bp-A58h]@11
  int v47; // [sp+54h] [bp-A54h]@11
  void *v48; // [sp+58h] [bp-A50h]@11
  void *v49; // [sp+5Ch] [bp-A4Ch]@11
  int v50; // [sp+60h] [bp-A48h]@9
  int v51; // [sp+64h] [bp-A44h]@9
  int v52; // [sp+68h] [bp-A40h]@9
  int v53; // [sp+6Ch] [bp-A3Ch]@9
  void *v54; // [sp+70h] [bp-A38h]@9
  void *v55; // [sp+74h] [bp-A34h]@9
  int v56; // [sp+78h] [bp-A30h]@5
  int v57; // [sp+7Ch] [bp-A2Ch]@5
  int v58; // [sp+80h] [bp-A28h]@5
  int v59; // [sp+84h] [bp-A24h]@5
  void *v60; // [sp+88h] [bp-A20h]@5
  void *v61; // [sp+8Ch] [bp-A1Ch]@5
  int v62; // [sp+90h] [bp-A18h]@4
  int v63; // [sp+94h] [bp-A14h]@4
  int v64; // [sp+98h] [bp-A10h]@3
  int v65; // [sp+9Ch] [bp-A0Ch]@3
  void *v66; // [sp+A0h] [bp-A08h]@1
  int v67; // [sp+A4h] [bp-A04h]@31
  int v68; // [sp+A8h] [bp-A00h]@27
  int *v69; // [sp+ACh] [bp-9FCh]@26
  void **v70; // [sp+B0h] [bp-9F8h]@26
  char **v71; // [sp+B4h] [bp-9F4h]@26
  char v72; // [sp+B8h] [bp-9F0h]@26
  char v73; // [sp+BCh] [bp-9ECh]@26
  bool v74; // [sp+C3h] [bp-9E5h]@26
  int v75; // [sp+C4h] [bp-9E4h]@25
  int *v76; // [sp+C8h] [bp-9E0h]@24
  void **v77; // [sp+CCh] [bp-9DCh]@24
  char **v78; // [sp+D0h] [bp-9D8h]@24
  char v79; // [sp+D4h] [bp-9D4h]@24
  char v80; // [sp+D8h] [bp-9D0h]@24
  bool v81; // [sp+DFh] [bp-9C9h]@24
  int v82; // [sp+E0h] [bp-9C8h]@23
  int *v83; // [sp+E4h] [bp-9C4h]@22
  void **v84; // [sp+E8h] [bp-9C0h]@22
  char **v85; // [sp+ECh] [bp-9BCh]@22
  char v86; // [sp+F0h] [bp-9B8h]@22
  char v87; // [sp+F4h] [bp-9B4h]@22
  bool v88; // [sp+FBh] [bp-9ADh]@22
  int v89; // [sp+FCh] [bp-9ACh]@18
  char v90; // [sp+100h] [bp-9A8h]@17
  char v91; // [sp+104h] [bp-9A4h]@17
  bool v92; // [sp+10Bh] [bp-99Dh]@17
  int v93; // [sp+10Ch] [bp-99Ch]@16
  char v94; // [sp+110h] [bp-998h]@15
  bool v95; // [sp+117h] [bp-991h]@15
  int v96; // [sp+118h] [bp-990h]@12
  int *v97; // [sp+11Ch] [bp-98Ch]@11
  void **v98; // [sp+120h] [bp-988h]@11
  char **v99; // [sp+124h] [bp-984h]@11
  char v100; // [sp+128h] [bp-980h]@11
  char v101; // [sp+12Ch] [bp-97Ch]@11
  bool v102; // [sp+133h] [bp-975h]@11
  int v103; // [sp+134h] [bp-974h]@10
  int *v104; // [sp+138h] [bp-970h]@9
  void **v105; // [sp+13Ch] [bp-96Ch]@9
  char **v106; // [sp+140h] [bp-968h]@9
  char v107; // [sp+144h] [bp-964h]@9
  char v108; // [sp+148h] [bp-960h]@9
  bool v109; // [sp+14Fh] [bp-959h]@9
  int v110; // [sp+150h] [bp-958h]@8
  int *v111; // [sp+154h] [bp-954h]@5
  void **v112; // [sp+158h] [bp-950h]@5
  char **v113; // [sp+15Ch] [bp-94Ch]@5
  char v114; // [sp+160h] [bp-948h]@5
  char v115; // [sp+164h] [bp-944h]@5
  bool v116; // [sp+16Bh] [bp-93Dh]@5
  char v117; // [sp+170h] [bp-938h]@5
  char v118; // [sp+174h] [bp-934h]@5
  char v119; // [sp+178h] [bp-930h]@5
  int v120; // [sp+17Ch] [bp-92Ch]@4
  int v121; // [sp+180h] [bp-928h]@3
  char v122; // [sp+184h] [bp-924h]@1
  int v123; // [sp+188h] [bp-920h]@1
  char v124; // [sp+18Ch] [bp-91Ch]@15
  char v125; // [sp+190h] [bp-918h]@15
  unsigned int i; // [sp+1A4h] [bp-904h]@19
  unsigned int v127; // [sp+1A8h] [bp-900h]@19
  int v128; // [sp+1ACh] [bp-8FCh]@3
  char v129; // [sp+1B0h] [bp-8F8h]@1
  char v130; // [sp+1B4h] [bp-8F4h]@1
  char v131; // [sp+214h] [bp-894h]@1
  char v132; // [sp+278h] [bp-830h]@1
  wchar_t Dst; // [sp+27Ch] [bp-82Ch]@6
  unsigned int v134; // [sp+A80h] [bp-28h]@1
  wchar_t **v135; // [sp+A84h] [bp-24h]@31
  char v136; // [sp+A88h] [bp-20h]@1
  int v137; // [sp+A8Ch] [bp-1Ch]@1
  __int32 v138; // [sp+A90h] [bp-18h]@31
  char v139; // [sp+A94h] [bp-14h]@1
  char v140; // [sp+A98h] [bp-10h]@1
  int v141; // [sp+AA4h] [bp-4h]@1
  int v142; // [sp+AA8h] [bp+0h]@1

  v134 = (unsigned int)&v142 ^ __security_cookie;
  v25 = (unsigned int)&v142 ^ __security_cookie;
  v66 = pthis;
  v141 = 0;
  sub_1000B850(&v137);
  LOBYTE(v141) = 1;
  sub_1000B850(&v139);
  LOBYTE(v141) = 2;
  sub_1000B850(&v136);
  LOBYTE(v141) = 3;
  sub_1000B850(&v129);
  LOBYTE(v141) = 4;
  sub_1000B850(&v140);
  LOBYTE(v141) = 5;
  sub_1000B850(&v132);
  LOBYTE(v141) = 6;
  std::locale::_Locimp::__Locimp(&v130);
  LOBYTE(v141) = 7;
  std::locale::_Locimp::__Locimp(&v131);
  LOBYTE(v141) = 8;
  sub_1000AEA0(L"res://dProdRes.dll//DEVICE_CONFIG.xml");
  LOBYTE(v141) = 9;
  v123 = sub_1000CC90(&v122, &v137);
  LOBYTE(v141) = 8;
  sub_1000B710(&v122);
  if ( !v123 )
  {
    swprintf_s(&Dst, 0x104u, L"LoadXMLFile fail:%s", v137);
    sub_10001C40(0, 3, (unsigned int)&Dst);
    LOBYTE(v141) = 7;
    sub_1000CC50(&v131);
    LOBYTE(v141) = 6;
    sub_1000CC50(&v130);
    LOBYTE(v141) = 5;
    sub_1000B710(&v132);
    LOBYTE(v141) = 4;
    sub_1000B710(&v140);
    LOBYTE(v141) = 3;
    sub_1000B710(&v129);
    LOBYTE(v141) = 2;
    sub_1000B710(&v136);
    LOBYTE(v141) = 1;
    sub_1000B710(&v139);
    LOBYTE(v141) = 0;
    sub_1000B710(&v137);
    v141 = -1;
    sub_1000B710(&a2);
    return 0;
  }
  if ( sub_1000A220(&a2, 43, 0) == -1 )
  {
    v63 = sub_1000A400((int)&v120, L"CP", (int)&a2);
    v62 = v63;
    LOBYTE(v141) = 12;
    sub_1000AA30(v63);
    LOBYTE(v141) = 8;
    sub_1000B710(&v120);
  }
  else
  {
    sub_1000B850(&v128);
    LOBYTE(v141) = 10;
    sub_1000AA30(&a2);
    v2 = sub_1000A310(43);
    sub_1000A160(&v128, v2, 260);
    sub_1000A0E0(L"Plus");
    v65 = sub_1000A400((int)&v121, L"CP", (int)&v128);
    v64 = v65;
    LOBYTE(v141) = 11;
    sub_1000AA30(v65);
    LOBYTE(v141) = 10;
    sub_1000B710(&v121);
    LOBYTE(v141) = 8;
    sub_1000B710(&v128);
  }
  sub_1000AEA0(L"Index");
  LOBYTE(v141) = 13;
  sub_1000CF80(&v140, &v119, &v132, &v137);
  LOBYTE(v141) = 8;
  sub_1000B710(&v119);
  sub_1000B230((int)((char *)v66 + 612), L"%s\\%s\\%s.xml", (_BYTE)v66 + 4);
  sub_1000AEA0(L"name");
  LOBYTE(v141) = 14;
  sub_1000AEA0(L"Phone");
  LOBYTE(v141) = 15;
  sub_1000D3B0((char *)v66 + 612, &v117, &v118, &v132, &v137);
  LOBYTE(v141) = 14;
  sub_1000B710(&v117);
  LOBYTE(v141) = 8;
  sub_1000B710(&v118);
  sub_1000AEA0(L"SolutionType");
  LOBYTE(v141) = 16;
  sub_1000AEA0(L"ProjectInfo");
  LOBYTE(v141) = 17;
  v24 = (int)&v137;
  v23 = &v139;
  v22 = &v115;
  v21 = &v114;
  v20 = &v115;
  v113 = &v20;
  v61 = sub_1000ABC0(&v20, (int)&v132);
  v60 = v61;
  LOBYTE(v141) = 18;
  v19 = v61;
  v112 = &v19;
  v59 = sub_1000AEA0(L"name");
  v58 = v59;
  LOBYTE(v141) = 19;
  v18 = v4;
  v111 = &v18;
  v57 = sub_1000AEA0(L"Phone");
  LOBYTE(v141) = 17;
  v56 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
  v116 = v56 == 0;
  LOBYTE(v141) = 16;
  sub_1000B710(&v114);
  LOBYTE(v141) = 8;
  sub_1000B710(&v115);
  if ( v116 )
  {
    v24 = v137;
    swprintf_s(&Dst, 0x104u, L"Get solution attribute fail:%s", v137);
    sub_10001C40(0, 3, (unsigned int)&Dst);
    CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v130);
    v110 = 0;
    LOBYTE(v141) = 7;
    sub_1000CC50(&v131);
    LOBYTE(v141) = 6;
    sub_1000CC50(&v130);
    LOBYTE(v141) = 5;
    sub_1000B710(&v132);
    LOBYTE(v141) = 4;
    sub_1000B710(&v140);
    LOBYTE(v141) = 3;
    sub_1000B710(&v129);
    LOBYTE(v141) = 2;
    sub_1000B710(&v136);
    LOBYTE(v141) = 1;
    sub_1000B710(&v139);
    LOBYTE(v141) = 0;
    sub_1000B710(&v137);
    v141 = -1;
    sub_1000B710(&a2);
    return v110;
  }
  sub_1000AEA0(L"ChipsetType");
  LOBYTE(v141) = 20;
  sub_1000AEA0(L"ProjectInfo");
  LOBYTE(v141) = 21;
  v24 = (int)&v137;
  v23 = &v136;
  v22 = &v108;
  v21 = &v107;
  v20 = &v108;
  v106 = &v20;
  v55 = sub_1000ABC0(&v20, (int)&v132);
  v54 = v55;
  LOBYTE(v141) = 22;
  v19 = v55;
  v105 = &v19;
  v53 = sub_1000AEA0(L"name");
  v52 = v53;
  LOBYTE(v141) = 23;
  v18 = v5;
  v104 = &v18;
  v51 = sub_1000AEA0(L"Phone");
  LOBYTE(v141) = 21;
  v50 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
  v109 = v50 == 0;
  LOBYTE(v141) = 20;
  sub_1000B710(&v107);
  LOBYTE(v141) = 8;
  sub_1000B710(&v108);
  if ( v109 )
  {
    v24 = v137;
    swprintf_s(&Dst, 0x104u, L"Get chipset attribute fail:%s", v137);
    sub_10001C40(0, 3, (unsigned int)&Dst);
    CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v130);
    v103 = 0;
    LOBYTE(v141) = 7;
    sub_1000CC50(&v131);
    LOBYTE(v141) = 6;
    sub_1000CC50(&v130);
    LOBYTE(v141) = 5;
    sub_1000B710(&v132);
    LOBYTE(v141) = 4;
    sub_1000B710(&v140);
    LOBYTE(v141) = 3;
    sub_1000B710(&v129);
    LOBYTE(v141) = 2;
    sub_1000B710(&v136);
    LOBYTE(v141) = 1;
    sub_1000B710(&v139);
    LOBYTE(v141) = 0;
    sub_1000B710(&v137);
    v141 = -1;
    sub_1000B710(&a2);
    return v103;
  }
  sub_1000AEA0(L"UnzipCPB");
  LOBYTE(v141) = 24;
  sub_1000AEA0(L"Download");
  LOBYTE(v141) = 25;
  v24 = (int)&v137;
  v23 = &v129;
  v22 = &v101;
  v21 = &v100;
  v20 = &v101;
  v99 = &v20;
  v49 = sub_1000ABC0(&v20, (int)&v132);
  v48 = v49;
  LOBYTE(v141) = 26;
  v19 = v49;
  v98 = &v19;
  v47 = sub_1000AEA0(L"name");
  v46 = v47;
  LOBYTE(v141) = 27;
  v18 = v6;
  v97 = &v18;
  v45 = sub_1000AEA0(L"Phone");
  LOBYTE(v141) = 25;
  v44 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
  v102 = v44 == 0;
  LOBYTE(v141) = 24;
  sub_1000B710(&v100);
  LOBYTE(v141) = 8;
  sub_1000B710(&v101);
  if ( v102 )
  {
    v24 = v137;
    swprintf_s(&Dst, 0x104u, L"Get unzip attribute fail:%s", v137);
    sub_10001C40(0, 3, (unsigned int)&Dst);
    CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v130);
    v96 = 0;
    LOBYTE(v141) = 7;
    sub_1000CC50(&v131);
    LOBYTE(v141) = 6;
    sub_1000CC50(&v130);
    LOBYTE(v141) = 5;
    sub_1000B710(&v132);
    LOBYTE(v141) = 4;
    sub_1000B710(&v140);
    LOBYTE(v141) = 3;
    sub_1000B710(&v129);
    LOBYTE(v141) = 2;
    sub_1000B710(&v136);
    LOBYTE(v141) = 1;
    sub_1000B710(&v139);
    LOBYTE(v141) = 0;
    sub_1000B710(&v137);
    v141 = -1;
    sub_1000B710(&a2);
    return v96;
  }
  CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v130);
  if ( *((_DWORD *)v66 + 157) == 3 || *((_DWORD *)v66 + 157) == 2 )
  {
    sub_1001F854(&v125);
    LOBYTE(v141) = 28;
    sub_1000B850(&v124);
    LOBYTE(v141) = 29;
    sub_1000B6D0(&v125);
    sub_1000AEA0(L"res://dProdRes.dll//YGDP_CONFIG.xml");
    LOBYTE(v141) = 30;
    v95 = sub_1000CC90(&v94, &v137) == 0;
    LOBYTE(v141) = 29;
    sub_1000B710(&v94);
    if ( v95 )
    {
      v24 = v137;
      swprintf_s(&Dst, 0x104u, L"LoadYGDPXMLFile fail:%s", v137);
      sub_10001C40(0, 3, (unsigned int)&Dst);
      v93 = 0;
      LOBYTE(v141) = 28;
      sub_1000B710(&v124);
      LOBYTE(v141) = 8;
      CStringArray::_CStringArray(&v125);
      LOBYTE(v141) = 7;
      sub_1000CC50(&v131);
      LOBYTE(v141) = 6;
      sub_1000CC50(&v130);
      LOBYTE(v141) = 5;
      sub_1000B710(&v132);
      LOBYTE(v141) = 4;
      sub_1000B710(&v140);
      LOBYTE(v141) = 3;
      sub_1000B710(&v129);
      LOBYTE(v141) = 2;
      sub_1000B710(&v136);
      LOBYTE(v141) = 1;
      sub_1000B710(&v139);
      LOBYTE(v141) = 0;
      sub_1000B710(&v137);
      v141 = -1;
      sub_1000B710(&a2);
      return v93;
    }
    sub_1000AEA0(L"name");
    LOBYTE(v141) = 31;
    sub_1000AEA0(L"SwitchPhone");
    LOBYTE(v141) = 32;
    v92 = sub_1000D0B0(&v90, &v91, &v125, &v137) == 0;
    LOBYTE(v141) = 31;
    sub_1000B710(&v90);
    LOBYTE(v141) = 29;
    sub_1000B710(&v91);
    if ( v92 )
    {
      v24 = v137;
      swprintf_s(&Dst, 0x104u, L"Get SwitchPhone attribute fail:%s", v137);
      sub_10001C40(0, 3, (unsigned int)&Dst);
      CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v131);
      v89 = 0;
      LOBYTE(v141) = 28;
      sub_1000B710(&v124);
      LOBYTE(v141) = 8;
      CStringArray::_CStringArray(&v125);
      LOBYTE(v141) = 7;
      sub_1000CC50(&v131);
      LOBYTE(v141) = 6;
      sub_1000CC50(&v130);
      LOBYTE(v141) = 5;
      sub_1000B710(&v132);
      LOBYTE(v141) = 4;
      sub_1000B710(&v140);
      LOBYTE(v141) = 3;
      sub_1000B710(&v129);
      LOBYTE(v141) = 2;
      sub_1000B710(&v136);
      LOBYTE(v141) = 1;
      sub_1000B710(&v139);
      LOBYTE(v141) = 0;
      sub_1000B710(&v137);
      v141 = -1;
      sub_1000B710(&a2);
      return v89;
    }
    v127 = unknown_libname_116(&v125);
    for ( i = 0; i < v127; ++i )
    {
      v7 = sub_1000E7B0(i);
      sub_1000AA30(v7);
      v8 = unknown_libname_123(&a2);
      if ( !sub_1000A100(&v124, v8) )
      {
        sub_1000AEA0(L"SolutionType");
        LOBYTE(v141) = 33;
        sub_1000AEA0(L"ProjectInfo");
        LOBYTE(v141) = 34;
        v24 = (int)&v137;
        v23 = &v139;
        v22 = &v87;
        v21 = &v86;
        v20 = &v139;
        v85 = &v20;
        v43 = sub_1000ABC0(&v20, (int)&a2);
        v42 = v43;
        LOBYTE(v141) = 35;
        v19 = v9;
        v84 = &v19;
        v41 = sub_1000AEA0(L"name");
        v40 = v41;
        LOBYTE(v141) = 36;
        v18 = v41;
        v83 = &v18;
        v39 = sub_1000AEA0(L"SwitchPhone");
        LOBYTE(v141) = 34;
        v38 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
        v88 = v38 == 0;
        LOBYTE(v141) = 33;
        sub_1000B710(&v86);
        LOBYTE(v141) = 29;
        sub_1000B710(&v87);
        if ( v88 )
        {
          v24 = v137;
          swprintf_s(&Dst, 0x104u, L"Get switch solution attribute fail:%s", v137);
          sub_10001C40(0, 3, (unsigned int)&Dst);
          CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v131);
          v82 = 0;
          LOBYTE(v141) = 28;
          sub_1000B710(&v124);
          LOBYTE(v141) = 8;
          CStringArray::_CStringArray(&v125);
          LOBYTE(v141) = 7;
          sub_1000CC50(&v131);
          LOBYTE(v141) = 6;
          sub_1000CC50(&v130);
          LOBYTE(v141) = 5;
          sub_1000B710(&v132);
          LOBYTE(v141) = 4;
          sub_1000B710(&v140);
          LOBYTE(v141) = 3;
          sub_1000B710(&v129);
          LOBYTE(v141) = 2;
          sub_1000B710(&v136);
          LOBYTE(v141) = 1;
          sub_1000B710(&v139);
          LOBYTE(v141) = 0;
          sub_1000B710(&v137);
          v141 = -1;
          sub_1000B710(&a2);
          return v82;
        }
        sub_1000AEA0(L"ChipsetType");
        LOBYTE(v141) = 37;
        sub_1000AEA0(L"ProjectInfo");
        LOBYTE(v141) = 38;
        v24 = (int)&v137;
        v23 = &v136;
        v22 = &v80;
        v21 = &v79;
        v20 = &v79;
        v78 = &v20;
        v37 = sub_1000ABC0(&v20, (int)&a2);
        v36 = v37;
        LOBYTE(v141) = 39;
        v19 = v10;
        v77 = &v19;
        v35 = sub_1000AEA0(L"name");
        v34 = v35;
        LOBYTE(v141) = 40;
        v18 = v35;
        v76 = &v18;
        v33 = sub_1000AEA0(L"SwitchPhone");
        LOBYTE(v141) = 38;
        v32 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
        v81 = v32 == 0;
        LOBYTE(v141) = 37;
        sub_1000B710(&v79);
        LOBYTE(v141) = 29;
        sub_1000B710(&v80);
        if ( v81 )
        {
          v24 = v137;
          swprintf_s(&Dst, 0x104u, L"Get switch chipset attribute fail:%s", v137);
          sub_10001C40(0, 3, (unsigned int)&Dst);
          CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v131);
          v75 = 0;
          LOBYTE(v141) = 28;
          sub_1000B710(&v124);
          LOBYTE(v141) = 8;
          CStringArray::_CStringArray(&v125);
          LOBYTE(v141) = 7;
          sub_1000CC50(&v131);
          LOBYTE(v141) = 6;
          sub_1000CC50(&v130);
          LOBYTE(v141) = 5;
          sub_1000B710(&v132);
          LOBYTE(v141) = 4;
          sub_1000B710(&v140);
          LOBYTE(v141) = 3;
          sub_1000B710(&v129);
          LOBYTE(v141) = 2;
          sub_1000B710(&v136);
          LOBYTE(v141) = 1;
          sub_1000B710(&v139);
          LOBYTE(v141) = 0;
          sub_1000B710(&v137);
          v141 = -1;
          sub_1000B710(&a2);
          return v75;
        }
        sub_1000AEA0(L"UnzipCPB");
        LOBYTE(v141) = 41;
        sub_1000AEA0(L"Download");
        LOBYTE(v141) = 42;
        v24 = (int)&v137;
        v23 = &v129;
        v22 = &v73;
        v21 = &v72;
        v20 = &v72;
        v71 = &v20;
        v31 = sub_1000ABC0(&v20, (int)&a2);
        v30 = v31;
        LOBYTE(v141) = 43;
        v19 = v11;
        v70 = &v19;
        v29 = sub_1000AEA0(L"name");
        v28 = v29;
        LOBYTE(v141) = 44;
        v18 = v29;
        v69 = &v18;
        v27 = sub_1000AEA0(L"SwitchPhone");
        LOBYTE(v141) = 42;
        v26 = sub_1000D1F0(v18, (char)v19, (char)v20, v21, v22, v23, v24);
        v74 = v26 == 0;
        LOBYTE(v141) = 41;
        sub_1000B710(&v72);
        LOBYTE(v141) = 29;
        sub_1000B710(&v73);
        if ( v74 )
        {
          v24 = v137;
          swprintf_s(&Dst, 0x104u, L"Get switch unzip attribute fail:%s", v137);
          sub_10001C40(0, 3, (unsigned int)&Dst);
          CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v131);
          v68 = 0;
          LOBYTE(v141) = 28;
          sub_1000B710(&v124);
          LOBYTE(v141) = 8;
          CStringArray::_CStringArray(&v125);
          LOBYTE(v141) = 7;
          sub_1000CC50(&v131);
          LOBYTE(v141) = 6;
          sub_1000CC50(&v130);
          LOBYTE(v141) = 5;
          sub_1000B710(&v132);
          LOBYTE(v141) = 4;
          sub_1000B710(&v140);
          LOBYTE(v141) = 3;
          sub_1000B710(&v129);
          LOBYTE(v141) = 2;
          sub_1000B710(&v136);
          LOBYTE(v141) = 1;
          sub_1000B710(&v139);
          LOBYTE(v141) = 0;
          sub_1000B710(&v137);
          v141 = -1;
          sub_1000B710(&a2);
          return v68;
        }
        break;
      }
    }
    CDaoIndexFieldInfo::_CDaoIndexFieldInfo(&v131);
    LOBYTE(v141) = 28;
    sub_1000B710(&v124);
    LOBYTE(v141) = 8;
    CStringArray::_CStringArray(&v125);
  }
  v135 = 0;
  v24 = 10;
  v23 = 0;
  v12 = unknown_libname_123(&v139);
  v13 = wcstol((const wchar_t *)v12, (wchar_t **)v23, v24);
  v138 = v13;
  *((_DWORD *)v66 + 167) = v13;
  v24 = 10;
  v23 = (char *)v135;
  v14 = unknown_libname_123(&v136);
  v15 = wcstol((const wchar_t *)v14, (wchar_t **)v23, v24);
  v138 = v15;
  *((_DWORD *)v66 + 168) = v15;
  v24 = 10;
  v23 = (char *)v135;
  v16 = unknown_libname_123(&v129);
  v17 = wcstol((const wchar_t *)v16, (wchar_t **)v23, v24);
  v138 = v17;
  *((_DWORD *)v66 + 194) = v17 != 0;
  v67 = 1;
  LOBYTE(v141) = 7;
  sub_1000CC50(&v131);
  LOBYTE(v141) = 6;
  sub_1000CC50(&v130);
  LOBYTE(v141) = 5;
  sub_1000B710(&v132);
  LOBYTE(v141) = 4;
  sub_1000B710(&v140);
  LOBYTE(v141) = 3;
  sub_1000B710(&v129);
  LOBYTE(v141) = 2;
  sub_1000B710(&v136);
  LOBYTE(v141) = 1;
  sub_1000B710(&v139);
  LOBYTE(v141) = 0;
  sub_1000B710(&v137);
  v141 = -1;
  sub_1000B710(&a2);
  return v67;
}

0 0
原创粉丝点击