我有个软件只能光盘安装或者做成iso镜像用虚拟光驱安装。
在光盘根目录里面有个start.exe和setup.exe,只能先运行start.exe然后选择安装按钮,start.exe调用setup.exe进行安装。如果只是运行setup.exe后提示:请运行start.exe进行安装。
现在我想做成硬盘安装版。
我把setup.exe解包后,得到CompiledCode.bin,然后我用disasm进行反编译。得到如下信息:
[TYPES]
Type [0]: Pointer
Type [1]: U32
Type [2]: Variant
Type [3]: Unknown 14
Type [4]: Unknown 24
Type [5]: Extended
Type [6]: Double
Type [7]: Single
Type [8]: S64
Type [9]: String
Type [10]: U32
Type [11]: S32
Type [12]: S16
Type [13]: U16
Type [14]: S8
Type [15]: WideString
Type [16]: WideChar
Type [17]: Char
Type [18]: U32
Type [19]: U8 Export: BOOLEAN
Type [20]: U8
Type [21]: Class Export: TMAINFORM
Type [22]: Class Export: TWIZARDFORM
Type [23]: StaticArray[4] of S32
Type [24]: StaticArray[12] of Char
Type [25]: U8
Type [26]: Class Export: TSTRINGLIST
Type [27]: Class Export: TOBJECT
[VARS]
Var [0]: 21 Class TMAINFORM
Var [1]: 22 Class TWIZARDFORM
[PROCS]
Proc [0] Export: !MAIN -1
[0] RET
Proc [1] Export: GETUSENAME 9
[0] PUSHTYPE 9(String) // 1
[5] ASSIGN Base[1], ['Username']
[28] PUSHTYPE 9(String) // 2
[33] ASSIGN Base[2], ['Software\aa\bb']
[78] PUSHTYPE 11(S32) // 3
[83] ASSIGN Base[3], [2147483650]
[98] PUSHVAR Base[-1] // 4
[104] CALL 2
[109] POP // 3
[110] POP // 2
[111] POP // 1
[112] POP // 0
[113] RET
Proc [2]: External Decl: \01\00\00\00 REGREADSTRING
Proc [3] Export: GETCOMPANYNAME 9
[0] PUSHTYPE 9(String) // 1
[5] ASSIGN Base[1], ['CompanyName']
[31] PUSHTYPE 9(String) // 2
[36] ASSIGN Base[2], ['Software\aa\bb']
[81] PUSHTYPE 11(S32) // 3
[86] ASSIGN Base[3], [2147483650]
[101] PUSHVAR Base[-1] // 4
[107] CALL 2
[112] POP // 3
[113] POP // 2
[114] POP // 1
[115] POP // 0
[116] RET
Proc [4] Export: GETREGCODE 9
[0] PUSHTYPE 9(String) // 1
[5] ASSIGN Base[1], ['RegisterCode']
[32] PUSHTYPE 9(String) // 2
[37] ASSIGN Base[2], ['Software\aa\bb']
[82] PUSHTYPE 11(S32) // 3
[87] ASSIGN Base[3], [2147483650]
[102] PUSHVAR Base[-1] // 4
[108] CALL 2
[113] POP // 3
[114] POP // 2
[115] POP // 1
[116] POP // 0
[117] RET
Proc [5] Export: BYTECYCSHL 20 @20 @20
[0] ASSIGN Base[-1], Base[-2]
[11] CALC Base[-1] SHL Base[-3]
[23] PUSHTYPE 20(U8) // 1
[28] ASSIGN Base[1], Base[-2]
[39] PUSHTYPE 11(S32) // 2
[44] ASSIGN Base[2], [8]
[59] CALC Base[2] - Base[-3]
[71] CALC Base[1] SHR Base[2]
[83] POP // 1
[84] CALC Base[-1] OR Base[1]
[96] POP // 0
[97] RET
Proc [6] Export: BYTECYCSHR 20 @20 @20
[0] ASSIGN Base[-1], Base[-2]
[11] CALC Base[-1] SHR Base[-3]
[23] PUSHTYPE 20(U8) // 1
[28] ASSIGN Base[1], Base[-2]
[39] PUSHTYPE 11(S32) // 2
[44] ASSIGN Base[2], [8]
[59] CALC Base[2] - Base[-3]
[71] CALC Base[1] SHL Base[2]
[83] POP // 1
[84] CALC Base[-1] OR Base[1]
[96] POP // 0
[97] RET
Proc [7] Export: LONGCYCSHL 10 @10 @20
[0] ASSIGN Base[-1], Base[-2]
[11] CALC Base[-1] SHL Base[-3]
[23] PUSHTYPE 10(U32) // 1
[28] ASSIGN Base[1], Base[-2]
[39] PUSHTYPE 11(S32) // 2
[44] ASSIGN Base[2], [32]
[59] CALC Base[2] - Base[-3]
[71] CALC Base[1] SHR Base[2]
[83] POP // 1
[84] CALC Base[-1] OR Base[1]
[96] POP // 0
[97] RET
Proc [8] Export: CLEARSPACECHAR 9 @9
[0] PUSHTYPE 11(S32) // 1
[5] ASSIGN Base[-1], ['']
[20] ASSIGN Base[1], [1]
[35] PUSHTYPE 19(U8) // 2
[40] PUSHTYPE 11(S32) // 3
[45] PUSHTYPE 9(String) // 4
[50] ASSIGN Base[4], Base[-2]
[61] PUSHVAR Base[3] // 5
[67] CALL 9
[72] POP // 4
[73] POP // 3
[74] COMPARE into Base[2]: Base[1] <= Base[3]
[91] POP // 2
[92] COND_NOT_GOTO currpos + 163 Base[2] [265]
[102] PUSHTYPE 19(U8) // 3
[107] PUSHTYPE 17(Char) // 4
[112] PUSHTYPE 11(S32) // 5
[117] ASSIGN Base[5], Base[1]
[128] PUSHTYPE 0(Pointer) // 6
[133] SETPOINTER Base[6]: Base[-2]
[144] PUSHVAR Base[4] // 7
[150] CALL 10
[155] POP // 6
[156] POP // 5
[157] POP // 4
[158] COMPARE into Base[3]: Base[4] <> [#32]
[176] POP // 3
[177] SETFLAG NOT Base[3]
[184] POP // 2
[185] FLAGGOTO currpos + 64 [254]
[190] PUSHTYPE 17(Char) // 3
[195] PUSHTYPE 11(S32) // 4
[200] ASSIGN Base[4], Base[1]
[211] PUSHTYPE 0(Pointer) // 5
[216] SETPOINTER Base[5]: Base[-2]
[227] PUSHVAR Base[3] // 6
[233] CALL 10
[238] POP // 5
[239] POP // 4
[240] POP // 3
[241] CALC Base[-1] + Base[3]
[253] POP // 2
[254] INC Base[1]
[260] GOTO currpos + 4294967071 [40]
[265] POP // 1
[266] RET
Proc [9]: External Decl: \01\00 LENGTH
Proc [10]: External Decl: \01\01\00 STRGET
Proc [11] Export: CHARTOINT 11 @17
[0] ASSIGN Base[-1], Base[-2]
[11] RET
Proc [12] Export: STRTOLONG 19 @9 !11
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 11(S32) // 2
[10] ASSIGN Base[-1], [0]
[22] PUSHTYPE 9(String) // 3
[27] ASSIGN Base[3], Base[-2]
[38] PUSHVAR Base[-2] // 4
[44] CALL 13
[49] POP // 3
[50] POP // 2
[51] ASSIGN Base[-3], [0]
[66] ASSIGN Base[2], [1]
[81] PUSHTYPE 9(String) // 3
[86] ASSIGN Base[3], Base[-2]
[97] PUSHVAR Base[1] // 4
[103] CALL 9
[108] POP // 3
[109] POP // 2
[110] PUSHTYPE 19(U8) // 3
[115] COMPARE into Base[3]: Base[1] >= [1]
[136] COND_NOT_GOTO currpos + 93 Base[3] [239]
[146] PUSHTYPE 11(S32) // 4
[151] PUSHTYPE 17(Char) // 5
[156] PUSHTYPE 11(S32) // 6
[161] ASSIGN Base[6], Base[1]
[172] PUSHTYPE 0(Pointer) // 7
[177] SETPOINTER Base[7]: Base[-2]
[188] PUSHVAR Base[5] // 8
[194] CALL 10
[199] POP // 7
[200] POP // 6
[201] POP // 5
[202] PUSHVAR Base[4] // 6
[208] CALL 11
[213] POP // 5
[214] POP // 4
[215] CALC Base[-3] + Base[4]
[227] POP // 3
[228] DEC Base[1]
[234] GOTO currpos + 4294967172 [115]
[239] POP // 2
[240] ASSIGN Base[-1], [1]
[252] RET
Proc [13]: External Decl: \01\00 UPPERCASE
Proc [14] Export: GETMACHINECODE 11
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 23(StaticArray[4] of S32) // 2
[10] PUSHTYPE 24(StaticArray[12] of Char) // 3
[15] PUSHTYPE 11(S32) // 4
[20] PUSHTYPE 11(S32) // 5
[25] PUSHTYPE 11(S32) // 6
[30] PUSHTYPE 19(U8) // 7
[35] PUSHTYPE 0(Pointer) // 8
[40] SETPOINTER Base[8]: Base[1]
[51] PUSHTYPE 9(String) // 9
[56] ASSIGN Base[9], ['bb.exe']
[84] PUSHVAR Base[7] // 10
[90] CALL 12
[95] POP // 9
[96] POP // 8
[97] POP // 7
[98] SETFLAG NOT Base[7]
[105] POP // 6
[106] FLAGGOTO currpos + 11 [122]
[111] ASSIGN Base[6], Base[1]
[122] ASSIGN Base[-1], [185143568]
[137] CALC Base[-1] + Base[6]
[149] PUSHTYPE 0(Pointer) // 7
[154] SETPOINTER Base[7]: Base[2]
[165] CALL 15
[170] POP // 6
[171] PUSHTYPE 0(Pointer) // 7
[176] SETPOINTER Base[7]: Base[3]
[187] CALL 16
[192] POP // 6
[193] ASSIGN Base[1], [0]
[208] PUSHTYPE 19(U8) // 7
[213] COMPARE into Base[7]: Base[1] <= [3]
[234] COND_NOT_GOTO currpos + 278 Base[7] [522]
[244] PUSHTYPE 11(S32) // 8
[249] ASSIGN Base[8], Base[-1]
[260] PUSHTYPE 11(S32) // 9
[265] ASSIGN Base[9], Base[-1]
[276] PUSHTYPE 0(Pointer) // 10
[281] SETPOINTER Base[10]: Base[2]
[292] PUSHTYPE 10(U32) // 11
[297] ASSIGN Base[11], Base[1]
[308] CALC Base[11] - [0]
[324] SETPOINTER Base[10]: Base[10].Base[11]
[339] POP // 10
[340] CALC Base[9] * Base[10]
[352] POP // 9
[353] PUSHTYPE 20(U8) // 10
[358] PUSHTYPE 20(U8) // 11
[363] ASSIGN Base[11], [2]
[378] PUSHTYPE 20(U8) // 12
[383] PUSHTYPE 0(Pointer) // 13
[388] SETPOINTER Base[13]: Base[2]
[399] PUSHTYPE 10(U32) // 14
[404] ASSIGN Base[14], Base[1]
[415] CALC Base[14] - [0]
[431] SETPOINTER Base[13]: Base[13].Base[14]
[446] POP // 13
[447] ASSIGN Base[12], Base[13]
[458] POP // 12
[459] PUSHVAR Base[10] // 13
[465] CALL 6
[470] POP // 12
[471] POP // 11
[472] POP // 10
[473] CALC Base[9] * Base[10]
[485] POP // 9
[486] CALC Base[8] + Base[9]
[498] POP // 8
[499] ASSIGN Base[-1], Base[8]
[510] POP // 7
[511] INC Base[1]
[517] GOTO currpos + 4294966987 [213]
[522] POP // 6
[523] ASSIGN Base[1], [0]
[538] PUSHTYPE 19(U8) // 7
[543] COMPARE into Base[7]: Base[1] <= [11]
[564] COND_NOT_GOTO currpos + 336 Base[7] [910]
[574] PUSHTYPE 11(S32) // 8
[579] ASSIGN Base[8], Base[-1]
[590] PUSHTYPE 11(S32) // 9
[595] ASSIGN Base[9], Base[-1]
[606] PUSHTYPE 20(U8) // 10
[611] PUSHTYPE 20(U8) // 11
[616] ASSIGN Base[11], [3]
[631] PUSHTYPE 20(U8) // 12
[636] PUSHTYPE 0(Pointer) // 13
[641] SETPOINTER Base[13]: Base[3]
[652] PUSHTYPE 10(U32) // 14
[657] ASSIGN Base[14], Base[1]
[668] CALC Base[14] - [0]
[684] SETPOINTER Base[13]: Base[13].Base[14]
[699] POP // 13
[700] ASSIGN Base[12], Base[13]
[711] POP // 12
[712] PUSHVAR Base[10] // 13
[718] CALL 5
[723] POP // 12
[724] POP // 11
[725] POP // 10
[726] CALC Base[9] * Base[10]
[738] POP // 9
[739] PUSHTYPE 11(S32) // 10
[744] ASSIGN Base[10], Base[1]
[755] CALC Base[10] + [1]
[771] CALC Base[9] * Base[10]
[783] POP // 9
[784] PUSHTYPE 11(S32) // 10
[789] ASSIGN Base[10], Base[1]
[800] CALC Base[10] + [2]
[816] CALC Base[9] * Base[10]
[828] POP // 9
[829] PUSHTYPE 11(S32) // 10
[834] ASSIGN Base[10], Base[1]
[845] CALC Base[10] + [3]
[861] CALC Base[9] * Base[10]
[873] POP // 9
[874] CALC Base[8] + Base[9]
[886] POP // 8
[887] ASSIGN Base[-1], Base[8]
[898] POP // 7
[899] INC Base[1]
[905] GOTO currpos + 4294966929 [543]
[910] POP // 6
[911] ASSIGN Base[4], [3989547399]
[926] ASSIGN Base[1], [0]
[941] PUSHTYPE 19(U8) // 7
[946] COMPARE into Base[7]: Base[1] <= [11]
[967] COND_NOT_GOTO currpos + 282 Base[7] [1259]
[977] PUSHTYPE 20(U8) // 8
[982] PUSHTYPE 20(U8) // 9
[987] ASSIGN Base[9], [4]
[1002] PUSHTYPE 20(U8) // 10
[1007] PUSHTYPE 0(Pointer) // 11
[1012] SETPOINTER Base[11]: Base[3]
[1023] PUSHTYPE 10(U32) // 12
[1028] ASSIGN Base[12], Base[1]
[1039] CALC Base[12] - [0]
[1055] SETPOINTER Base[11]: Base[11].Base[12]
[1070] POP // 11
[1071] ASSIGN Base[10], Base[11]
[1082] POP // 10
[1083] PUSHVAR Base[8] // 11
[1089] CALL 5
[1094] POP // 10
[1095] POP // 9
[1096] POP // 8
[1097] ASSIGN Base[5], Base[8]
[1108] POP // 7
[1109] PUSHTYPE 11(S32) // 8
[1114] PUSHTYPE 10(U32) // 9
[1119] PUSHTYPE 0(Pointer) // 10
[1124] SETPOINTER Base[10]: Base[3]
[1135] PUSHTYPE 10(U32) // 11
[1140] ASSIGN Base[11], Base[1]
[1151] CALC Base[11] - [0]
[1167] SETPOINTER Base[10]: Base[10].Base[11]
[1182] POP // 10
[1183] ASSIGN Base[9], Base[10]
[1194] POP // 9
[1195] CALC Base[9] SHL [11]
[1211] ASSIGN Base[8], Base[9]
[1222] POP // 8
[1223] CALC Base[5] * Base[8]
[1235] POP // 7
[1236] CALC Base[4] + Base[5]
[1248] INC Base[1]
[1254] GOTO currpos + 4294966983 [946]
[1259] POP // 6
[1260] CALC Base[-1] + Base[4]
[1272] RET
Proc [15]: External Decl: \00\01 GETCPUID
Proc [16]: External Decl: \00\01 GETCPUVENDOR
Proc [17] Export: GETREGISTERCODE 11 @9 @9 @11
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 11(S32) // 2
[10] PUSHTYPE 11(S32) // 3
[15] ASSIGN Base[-1], [305419896]
[30] PUSHTYPE 9(String) // 4
[35] ASSIGN Base[4], Base[-2]
[46] PUSHVAR Base[-2] // 5
[52] CALL 8
[57] POP // 4
[58] POP // 3
[59] PUSHTYPE 9(String) // 4
[64] ASSIGN Base[4], Base[-3]
[75] PUSHVAR Base[-3] // 5
[81] CALL 8
[86] POP // 4
[87] POP // 3
[88] ASSIGN Base[1], [1]
[103] PUSHTYPE 19(U8) // 4
[108] PUSHTYPE 11(S32) // 5
[113] PUSHTYPE 9(String) // 6
[118] ASSIGN Base[6], Base[-2]
[129] PUSHVAR Base[5] // 7
[135] CALL 9
[140] POP // 6
[141] POP // 5
[142] COMPARE into Base[4]: Base[1] <= Base[5]
[159] POP // 4
[160] COND_NOT_GOTO currpos + 488 Base[4] [658]
[170] PUSHTYPE 10(U32) // 5
[175] PUSHTYPE 20(U8) // 6
[180] ASSIGN Base[6], Base[1]
[191] CALC Base[6] + [1]
[207] CALC Base[6] MOD [32]
[223] PUSHTYPE 10(U32) // 7
[228] ASSIGN Base[7], Base[-4]
[239] PUSHVAR Base[5] // 8
[245] CALL 7
[250] POP // 7
[251] POP // 6
[252] POP // 5
[253] ASSIGN Base[3], Base[5]
[264] POP // 4
[265] PUSHTYPE 11(S32) // 5
[270] PUSHTYPE 20(U8) // 6
[275] PUSHTYPE 20(U8) // 7
[280] ASSIGN Base[7], [3]
[295] PUSHTYPE 20(U8) // 8
[300] PUSHTYPE 17(Char) // 9
[305] PUSHTYPE 11(S32) // 10
[310] ASSIGN Base[10], Base[1]
[321] PUSHTYPE 0(Pointer) // 11
[326] SETPOINTER Base[11]: Base[-2]
[337] PUSHVAR Base[9] // 12
[343] CALL 10
[348] POP // 11
[349] POP // 10
[350] POP // 9
[351] ASSIGN Base[8], Base[9]
[362] POP // 8
[363] PUSHVAR Base[6] // 9
[369] CALL 5
[374] POP // 8
[375] POP // 7
[376] POP // 6
[377] ASSIGN Base[5], Base[6]
[388] POP // 5
[389] PUSHTYPE 10(U32) // 6
[394] PUSHTYPE 17(Char) // 7
[399] PUSHTYPE 11(S32) // 8
[404] ASSIGN Base[8], Base[1]
[415] PUSHTYPE 0(Pointer) // 9
[420] SETPOINTER Base[9]: Base[-2]
[431] PUSHVAR Base[7] // 10
[437] CALL 10
[442] POP // 9
[443] POP // 8
[444] POP // 7
[445] ASSIGN Base[6], Base[7]
[456] POP // 6
[457] CALC Base[6] MOD [8]
[473] CALC Base[6] + [6]
[489] CALC Base[5] SHL Base[6]
[501] POP // 5
[502] PUSHTYPE 20(U8) // 6
[507] PUSHTYPE 20(U8) // 7
[512] ASSIGN Base[7], [3]
[527] PUSHTYPE 20(U8) // 8
[532] PUSHTYPE 17(Char) // 9
[537] PUSHTYPE 11(S32) // 10
[542] ASSIGN Base[10], Base[1]
[553] PUSHTYPE 0(Pointer) // 11
[558] SETPOINTER Base[11]: Base[-2]
[569] PUSHVAR Base[9] // 12
[575] CALL 10
[580] POP // 11
[581] POP // 10
[582] POP // 9
[583] ASSIGN Base[8], Base[9]
[594] POP // 8
[595] PUSHVAR Base[6] // 9
[601] CALL 5
[606] POP // 8
[607] POP // 7
[608] POP // 6
[609] CALC Base[5] * Base[6]
[621] POP // 5
[622] CALC Base[3] + Base[5]
[634] POP // 4
[635] CALC Base[-1] + Base[3]
[647] INC Base[1]
[653] GOTO currpos + 4294966746 [108]
[658] POP // 3
[659] ASSIGN Base[1], [1]
[674] PUSHTYPE 19(U8) // 4
[679] PUSHTYPE 11(S32) // 5
[684] PUSHTYPE 9(String) // 6
[689] ASSIGN Base[6], Base[-3]
[700] PUSHVAR Base[5] // 7
[706] CALL 9
[711] POP // 6
[712] POP // 5
[713] COMPARE into Base[4]: Base[1] <= Base[5]
[730] POP // 4
[731] COND_NOT_GOTO currpos + 488 Base[4] [1229]
[741] PUSHTYPE 10(U32) // 5
[746] PUSHTYPE 20(U8) // 6
[751] ASSIGN Base[6], Base[1]
[762] CALC Base[6] + [6]
[778] CALC Base[6] MOD [32]
[794] PUSHTYPE 10(U32) // 7
[799] ASSIGN Base[7], Base[-4]
[810] PUSHVAR Base[5] // 8
[816] CALL 7
[821] POP // 7
[822] POP // 6
[823] POP // 5
[824] ASSIGN Base[3], Base[5]
[835] POP // 4
[836] PUSHTYPE 11(S32) // 5
[841] PUSHTYPE 20(U8) // 6
[846] PUSHTYPE 20(U8) // 7
[851] ASSIGN Base[7], [1]
[866] PUSHTYPE 20(U8) // 8
[871] PUSHTYPE 17(Char) // 9
[876] PUSHTYPE 11(S32) // 10
[881] ASSIGN Base[10], Base[1]
[892] PUSHTYPE 0(Pointer) // 11
[897] SETPOINTER Base[11]: Base[-3]
[908] PUSHVAR Base[9] // 12
[914] CALL 10
[919] POP // 11
[920] POP // 10
[921] POP // 9
[922] ASSIGN Base[8], Base[9]
[933] POP // 8
[934] PUSHVAR Base[6] // 9
[940] CALL 5
[945] POP // 8
[946] POP // 7
[947] POP // 6
[948] ASSIGN Base[5], Base[6]
[959] POP // 5
[960] PUSHTYPE 10(U32) // 6
[965] PUSHTYPE 17(Char) // 7
[970] PUSHTYPE 11(S32) // 8
[975] ASSIGN Base[8], Base[1]
[986] PUSHTYPE 0(Pointer) // 9
[991] SETPOINTER Base[9]: Base[-3]
[1002] PUSHVAR Base[7] // 10
[1008] CALL 10
[1013] POP // 9
[1014] POP // 8
[1015] POP // 7
[1016] ASSIGN Base[6], Base[7]
[1027] POP // 6
[1028] CALC Base[6] MOD [8]
[1044] CALC Base[6] + [3]
[1060] CALC Base[5] SHL Base[6]
[1072] POP // 5
[1073] PUSHTYPE 20(U8) // 6
[1078] PUSHTYPE 20(U8) // 7
[1083] ASSIGN Base[7], [2]
[1098] PUSHTYPE 20(U8) // 8
[1103] PUSHTYPE 17(Char) // 9
[1108] PUSHTYPE 11(S32) // 10
[1113] ASSIGN Base[10], Base[1]
[1124] PUSHTYPE 0(Pointer) // 11
[1129] SETPOINTER Base[11]: Base[-3]
[1140] PUSHVAR Base[9] // 12
[1146] CALL 10
[1151] POP // 11
[1152] POP // 10
[1153] POP // 9
[1154] ASSIGN Base[8], Base[9]
[1165] POP // 8
[1166] PUSHVAR Base[6] // 9
[1172] CALL 5
[1177] POP // 8
[1178] POP // 7
[1179] POP // 6
[1180] CALC Base[5] * Base[6]
[1192] POP // 5
[1193] CALC Base[3] + Base[5]
[1205] POP // 4
[1206] CALC Base[-1] + Base[3]
[1218] INC Base[1]
[1224] GOTO currpos + 4294966746 [679]
[1229] POP // 3
[1230] CALC Base[-1] + Base[-4]
[1242] RET
Proc [18] Export: MACHINECODEEX 9 @9 @11
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 23(StaticArray[4] of S32) // 2
[10] PUSHTYPE 24(StaticArray[12] of Char) // 3
[15] PUSHTYPE 11(S32) // 4
[20] PUSHTYPE 11(S32) // 5
[25] PUSHTYPE 11(S32) // 6
[30] PUSHTYPE 9(String) // 7
[35] PUSHTYPE 19(U8) // 8
[40] PUSHTYPE 0(Pointer) // 9
[45] SETPOINTER Base[9]: Base[1]
[56] PUSHTYPE 9(String) // 10
[61] ASSIGN Base[10], Base[-2]
[72] PUSHVAR Base[8] // 11
[78] CALL 12
[83] POP // 10
[84] POP // 9
[85] POP // 8
[86] SETFLAG NOT Base[8]
[93] POP // 7
[94] FLAGGOTO currpos + 11 [110]
[99] ASSIGN Base[5], Base[1]
[110] PUSHTYPE 0(Pointer) // 8
[115] SETPOINTER Base[8]: Base[2]
[126] CALL 15
[131] POP // 7
[132] PUSHTYPE 0(Pointer) // 8
[137] SETPOINTER Base[8]: Base[3]
[148] CALL 16
[153] POP // 7
[154] ASSIGN Base[1], [0]
[169] PUSHTYPE 19(U8) // 8
[174] COMPARE into Base[8]: Base[1] <= [3]
[195] COND_NOT_GOTO currpos + 278 Base[8] [483]
[205] PUSHTYPE 11(S32) // 9
[210] ASSIGN Base[9], Base[5]
[221] PUSHTYPE 11(S32) // 10
[226] ASSIGN Base[10], Base[5]
[237] PUSHTYPE 0(Pointer) // 11
[242] SETPOINTER Base[11]: Base[2]
[253] PUSHTYPE 10(U32) // 12
[258] ASSIGN Base[12], Base[1]
[269] CALC Base[12] - [0]
[285] SETPOINTER Base[11]: Base[11].Base[12]
[300] POP // 11
[301] CALC Base[10] * Base[11]
[313] POP // 10
[314] PUSHTYPE 20(U8) // 11
[319] PUSHTYPE 20(U8) // 12
[324] ASSIGN Base[12], [2]
[339] PUSHTYPE 20(U8) // 13
[344] PUSHTYPE 0(Pointer) // 14
[349] SETPOINTER Base[14]: Base[2]
[360] PUSHTYPE 10(U32) // 15
[365] ASSIGN Base[15], Base[1]
[376] CALC Base[15] - [0]
[392] SETPOINTER Base[14]: Base[14].Base[15]
[407] POP // 14
[408] ASSIGN Base[13], Base[14]
[419] POP // 13
[420] PUSHVAR Base[11] // 14
[426] CALL 6
[431] POP // 13
[432] POP // 12
[433] POP // 11
[434] CALC Base[10] * Base[11]
[446] POP // 10
[447] CALC Base[9] + Base[10]
[459] POP // 9
[460] ASSIGN Base[5], Base[9]
[471] POP // 8
[472] INC Base[1]
[478] GOTO currpos + 4294966987 [174]
[483] POP // 7
[484] ASSIGN Base[1], [0]
[499] PUSHTYPE 19(U8) // 8
[504] COMPARE into Base[8]: Base[1] <= [11]
[525] COND_NOT_GOTO currpos + 336 Base[8] [871]
[535] PUSHTYPE 11(S32) // 9
[540] ASSIGN Base[9], Base[5]
[551] PUSHTYPE 11(S32) // 10
[556] ASSIGN Base[10], Base[5]
[567] PUSHTYPE 20(U8) // 11
[572] PUSHTYPE 20(U8) // 12
[577] ASSIGN Base[12], [3]
[592] PUSHTYPE 20(U8) // 13
[597] PUSHTYPE 0(Pointer) // 14
[602] SETPOINTER Base[14]: Base[3]
[613] PUSHTYPE 10(U32) // 15
[618] ASSIGN Base[15], Base[1]
[629] CALC Base[15] - [0]
[645] SETPOINTER Base[14]: Base[14].Base[15]
[660] POP // 14
[661] ASSIGN Base[13], Base[14]
[672] POP // 13
[673] PUSHVAR Base[11] // 14
[679] CALL 5
[684] POP // 13
[685] POP // 12
[686] POP // 11
[687] CALC Base[10] * Base[11]
[699] POP // 10
[700] PUSHTYPE 11(S32) // 11
[705] ASSIGN Base[11], Base[1]
[716] CALC Base[11] + [1]
[732] CALC Base[10] * Base[11]
[744] POP // 10
[745] PUSHTYPE 11(S32) // 11
[750] ASSIGN Base[11], Base[1]
[761] CALC Base[11] + [2]
[777] CALC Base[10] * Base[11]
[789] POP // 10
[790] PUSHTYPE 11(S32) // 11
[795] ASSIGN Base[11], Base[1]
[806] CALC Base[11] + [3]
[822] CALC Base[10] * Base[11]
[834] POP // 10
[835] CALC Base[9] + Base[10]
[847] POP // 9
[848] ASSIGN Base[5], Base[9]
[859] POP // 8
[860] INC Base[1]
[866] GOTO currpos + 4294966929 [504]
[871] POP // 7
[872] ASSIGN Base[4], [3989547399]
[887] ASSIGN Base[1], [0]
[902] PUSHTYPE 19(U8) // 8
[907] COMPARE into Base[8]: Base[1] <= [11]
[928] COND_NOT_GOTO currpos + 282 Base[8] [1220]
[938] PUSHTYPE 20(U8) // 9
[943] PUSHTYPE 20(U8) // 10
[948] ASSIGN Base[10], [4]
[963] PUSHTYPE 20(U8) // 11
[968] PUSHTYPE 0(Pointer) // 12
[973] SETPOINTER Base[12]: Base[3]
[984] PUSHTYPE 10(U32) // 13
[989] ASSIGN Base[13], Base[1]
[1000] CALC Base[13] - [0]
[1016] SETPOINTER Base[12]: Base[12].Base[13]
[1031] POP // 12
[1032] ASSIGN Base[11], Base[12]
[1043] POP // 11
[1044] PUSHVAR Base[9] // 12
[1050] CALL 5
[1055] POP // 11
[1056] POP // 10
[1057] POP // 9
[1058] ASSIGN Base[6], Base[9]
[1069] POP // 8
[1070] PUSHTYPE 11(S32) // 9
[1075] PUSHTYPE 10(U32) // 10
[1080] PUSHTYPE 0(Pointer) // 11
[1085] SETPOINTER Base[11]: Base[3]
[1096] PUSHTYPE 10(U32) // 12
[1101] ASSIGN Base[12], Base[1]
[1112] CALC Base[12] - [0]
[1128] SETPOINTER Base[11]: Base[11].Base[12]
[1143] POP // 11
[1144] ASSIGN Base[10], Base[11]
[1155] POP // 10
[1156] CALC Base[10] SHL [11]
[1172] ASSIGN Base[9], Base[10]
[1183] POP // 9
[1184] CALC Base[6] * Base[9]
[1196] POP // 8
[1197] CALC Base[4] + Base[6]
[1209] INC Base[1]
[1215] GOTO currpos + 4294966983 [907]
[1220] POP // 7
[1221] CALC Base[5] + Base[4]
[1233] PUSHTYPE 11(S32) // 8
[1238] ASSIGN Base[8], Base[-3]
[1249] PUSHTYPE 11(S32) // 9
[1254] ASSIGN Base[9], Base[5]
[1265] PUSHVAR Base[7] // 10
[1271] CALL 19
[1276] POP // 9
[1277] POP // 8
[1278] POP // 7
[1279] ASSIGN Base[1], [1]
[1294] PUSHTYPE 19(U8) // 8
[1299] PUSHTYPE 11(S32) // 9
[1304] PUSHTYPE 9(String) // 10
[1309] ASSIGN Base[10], Base[7]
[1320] PUSHVAR Base[9] // 11
[1326] CALL 9
[1331] POP // 10
[1332] POP // 9
[1333] COMPARE into Base[8]: Base[1] <= Base[9]
[1350] POP // 8
[1351] COND_NOT_GOTO currpos + 98 Base[8] [1459]
[1361] CALC Base[-1] + ['pp']
[1384] PUSHTYPE 17(Char) // 9
[1389] PUSHTYPE 11(S32) // 10
[1394] ASSIGN Base[10], Base[1]
[1405] PUSHTYPE 0(Pointer) // 11
[1410] SETPOINTER Base[11]: Base[7]
[1421] PUSHVAR Base[9] // 12
[1427] CALL 10
[1432] POP // 11
[1433] POP // 10
[1434] POP // 9
[1435] CALC Base[-1] + Base[9]
[1447] POP // 8
[1448] INC Base[1]
[1454] GOTO currpos + 4294967136 [1299]
[1459] POP // 7
[1460] RET
Proc [19]: External Decl: \01\00\00 INTTOHEX
Proc [20] Export: COPYREPORT -1
[0] PUSHTYPE 9(String) // 1
[5] PUSHTYPE 9(String) // 2
[10] PUSHTYPE 9(String) // 3
[15] PUSHTYPE 9(String) // 4
[20] ASSIGN Base[4], ['{tmp}']
[40] PUSHVAR Base[1] // 5
[46] CALL 21
[51] POP // 4
[52] POP // 3
[53] CALC Base[1] + ['\a.x']
[80] PUSHTYPE 9(String) // 4
[85] ASSIGN Base[4], ['{app}']
[105] PUSHVAR Base[2] // 5
[111] CALL 21
[116] POP // 4
[117] POP // 3
[118] CALC Base[2] + ['\a.x]
[145] PUSHTYPE 11(S32) // 4
[150] ASSIGN Base[4], [64]
[165] PUSHTYPE 9(String) // 5
[170] ASSIGN Base[5], [bb.exe']
[198] PUSHVAR Base[3] // 6
[204] CALL 18
[209] POP // 5
[210] POP // 4
[211] POP // 3
[212] PUSHTYPE 19(U8) // 4
[217] PUSHTYPE 9(String) // 5
[222] ASSIGN Base[5], Base[1]
[233] PUSHVAR Base[4] // 6
[239] CALL 22
[244] POP // 5
[245] POP // 4
[246] SETFLAG NOT Base[4]
[253] POP // 3
[254] FLAGGOTO currpos + 56 [315]
[259] PUSHTYPE 9(String) // 4
[264] ASSIGN Base[4], Base[3]
[275] PUSHTYPE 9(String) // 5
[280] ASSIGN Base[5], Base[2]
[291] PUSHTYPE 9(String) // 6
[296] ASSIGN Base[6], Base[1]
[307] CALL 23
[312] POP // 5
[313] POP // 4
[314] POP // 3
[315] RET
Proc [21]: External Decl: \01\00 EXPANDCONSTANT
Proc [22]: External Decl: \01\00 FILEEXISTS
Proc [23]: External Decl: \00\00\00\00 DECTOENCTODEC
Proc [24] Export: WRITEINFO -1
[0] PUSHTYPE 9(String) // 1
[5] PUSHTYPE 9(String) // 2
[10] ASSIGN Base[2], ['']
[25] PUSHTYPE 9(String) // 3
[30] ASSIGN Base[3], ['bb.exe']
[58] PUSHVAR Base[1] // 4
[64] CALL 25
[69] POP // 3
[70] POP // 2
[71] POP // 1
[72] PUSHTYPE 9(String) // 2
[77] ASSIGN Base[2], Base[1]
[88] PUSHTYPE 9(String) // 3
[93] ASSIGN Base[3], ['CompanyName']
[119] PUSHTYPE 9(String) // 4
[124] ASSIGN Base[4], ['Software\aa\bb']
[169] PUSHTYPE 11(S32) // 5
[174] ASSIGN Base[5], [2147483650]
[189] CALL 26
[194] POP // 4
[195] POP // 3
[196] POP // 2
[197] POP // 1
[198] PUSHTYPE 9(String) // 2
[203] ASSIGN Base[2], Base[1]
[214] PUSHTYPE 9(String) // 3
[219] ASSIGN Base[3], ['Username']
[242] PUSHTYPE 9(String) // 4
[247] ASSIGN Base[4], ['Software\aa\bb']
[292] PUSHTYPE 11(S32) // 5
[297] ASSIGN Base[5], [2147483650]
[312] CALL 26
[317] POP // 4
[318] POP // 3
[319] POP // 2
[320] POP // 1
[321] PUSHTYPE 9(String) // 2
[326] PUSHTYPE 11(S32) // 3
[331] PUSHTYPE 11(S32) // 4
[336] PUSHVAR Base[4] // 5
[342] CALL 14
[347] POP // 4
[348] PUSHTYPE 9(String) // 5
[353] ASSIGN Base[5], Base[1]
[364] PUSHTYPE 9(String) // 6
[369] ASSIGN Base[6], Base[1]
[380] PUSHVAR Base[3] // 7
[386] CALL 17
[391] POP // 6
[392] POP // 5
[393] POP // 4
[394] POP // 3
[395] PUSHVAR Base[2] // 4
[401] CALL 27
[406] POP // 3
[407] POP // 2
[408] PUSHTYPE 9(String) // 3
[413] ASSIGN Base[3], ['RegisterCode']
[440] PUSHTYPE 9(String) // 4
[445] ASSIGN Base[4], ['Software\aa\bb']
[490] PUSHTYPE 11(S32) // 5
[495] ASSIGN Base[5], [2147483650]
[510] CALL 26
[515] POP // 4
[516] POP // 3
[517] POP // 2
[518] POP // 1
[519] PUSHTYPE 9(String) // 2
[524] PUSHVAR Base[2] // 3
[530] CALL 28
[535] POP // 2
[536] PUSHTYPE 9(String) // 3
[541] ASSIGN Base[3], ['winDir']
[562] PUSHTYPE 9(String) // 4
[567] ASSIGN Base[4], ['Software\aa\bb']
[612] PUSHTYPE 11(S32) // 5
[617] ASSIGN Base[5], [2147483649]
[632] CALL 26
[637] POP // 4
[638] POP // 3
[639] POP // 2
[640] POP // 1
[641] RET
Proc [25]: External Decl: \01\00\00 CHANGEFILEEXT
Proc [26]: External Decl: \00\00\00\00\00 REGWRITESTRING
Proc [27]: External Decl: \01\00 LONGTOHEX
Proc [28]: External Decl: \01 GETSYSTEMDIR
Proc [29] Export: INITIALIZESETUP 19
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 11(S32) // 2
[10] PUSHTYPE 11(S32) // 3
[15] PUSHTYPE 9(String) // 4
[20] ASSIGN Base[4], [软件安装']
[64] PUSHVAR Base[1] // 5
[70] CALL 30
[75] POP // 4
[76] POP // 3
[77] PUSHTYPE 11(S32) // 4
[82] ASSIGN Base[4], [0]
[97] PUSHTYPE 11(S32) // 5
[102] ASSIGN Base[5], [0]
[117] PUSHTYPE 11(S32) // 6
[122] ASSIGN Base[6], [2023]
[137] PUSHTYPE 11(S32) // 7
[142] ASSIGN Base[7], Base[1]
[153] PUSHVAR Base[2] // 8
[159] CALL 31
[164] POP // 7
[165] POP // 6
[166] POP // 5
[167] POP // 4
[168] POP // 3
[169] COMPARE into Base[-1]: Base[1] <> [0]
[190] COND_NOT_GOTO currpos + 39 Base[-1] [239]
[200] PUSHTYPE 19(U8) // 4
[205] COMPARE into Base[4]: Base[2] = [185143568]
[226] CALC Base[-1] AND Base[4]
[238] POP // 3
[239] PUSHTYPE 19(U8) // 4
[244] ASSIGN Base[4], Base[-1]
[255] BNOT Base[4]
[261] SETFLAG NOT Base[4]
[268] POP // 3
[269] FLAGGOTO currpos + 136 [410]
[274] PUSHTYPE 11(S32) // 4
[279] PUSHTYPE 11(S32) // 5
[284] ASSIGN Base[5], [0]
[299] PUSHTYPE 25(U8) // 6
[304] ASSIGN Base[6], [2]
[316] PUSHTYPE 9(String) // 7
[321] ASSIGN Base[7], ['请运行光盘引导程序start.exe来安装!']
[393] PUSHVAR Base[4] // 8
[399] CALL 32
[404] POP // 7
[405] POP // 6
[406] POP // 5
[407] POP // 4
[408] POP // 3
[409] RET
[410] PUSHTYPE 19(U8) // 4
[415] ASSIGN Base[4], Base[-1]
[426] BNOT Base[4]
[432] SETFLAG NOT Base[4]
[439] POP // 3
[440] FLAGGOTO currpos + 187 [632]
[445] PUSHTYPE 11(S32) // 4
[450] PUSHTYPE 11(S32) // 5
[455] ASSIGN Base[5], [0]
[470] PUSHTYPE 25(U8) // 6
[475] ASSIGN Base[6], [2]
[487] PUSHTYPE 9(String) // 7
[492] ASSIGN Base[7], ['请运行光盘引导程序start.exe来安装!']
[564] PUSHTYPE 9(String) // 8
[569] PUSHTYPE 11(S32) // 9
[574] ASSIGN Base[9], Base[2]
[585] PUSHVAR Base[8] // 10
[591] CALL 33
[596] POP // 9
[597] POP // 8
[598] CALC Base[7] + Base[8]
[610] POP // 7
[611] PUSHVAR Base[4] // 8
[617] CALL 32
[622] POP // 7
[623] POP // 6
[624] POP // 5
[625] POP // 4
[626] POP // 3
[627] GOTO currpos + 17 [649]
[632] CALL 24
[637] ASSIGN Base[-1], [1]
[649] RET
Proc [30]: External Decl: \01\00 FINDWINDOWBYWINDOWNAME
Proc [31]: External Decl: \01\00\00\00\00 SENDMESSAGE
Proc [32]: External Decl: \01\00\00\00 MSGBOX
Proc [33]: External Decl: \01\00 INTTOSTR
Proc [34] Export: CURSTEPCHANGED -1 @11
[0] PUSHTYPE 11(S32) // 1
[5] PUSHTYPE 9(String) // 2
[10] PUSHTYPE 9(String) // 3
[15] PUSHTYPE 9(String) // 4
[20] PUSHTYPE 26(Class) // 5
[25] PUSHTYPE 19(U8) // 6
[30] COMPARE into Base[6]: Base[-1] = [3]
[51] SETFLAG NOT Base[6]
[58] POP // 5
[59] FLAGGOTO currpos + 891 [955]
[64] CALL 20
[69] PUSHTYPE 19(U8) // 6
[74] ASSIGN Base[6], [0]
[86] PUSHTYPE 22(Class) // 7
[91] ASSIGN Base[7], GlobalVar[1]
[102] CALL 35
[107] POP // 6
[108] POP // 5
[109] PUSHEXCEPTION 787 4294967295 4294967295 829
[126] PUSHTYPE 9(String) // 6
[131] ASSIGN Base[6], ['{src}']
[151] PUSHVAR Base[4] // 7
[157] CALL 21
[162] POP // 6
[163] POP // 5
[164] CALC Base[4] + ['\参数\cc.ini']
[198] PUSHTYPE 19(U8) // 6
[203] PUSHTYPE 9(String) // 7
[208] ASSIGN Base[7], Base[4]
[219] PUSHVAR Base[6] // 8
[225] CALL 22
[230] POP // 7
[231] POP // 6
[232] BNOT Base[6]
[238] SETFLAG NOT Base[6]
[245] POP // 5
[246] FLAGGOTO currpos + 71 [322]
[251] PUSHTYPE 9(String) // 6
[256] ASSIGN Base[6], ['{src}']
[276] PUSHVAR Base[4] // 7
[282] CALL 21
[287] POP // 6
[288] POP // 5
[289] CALC Base[4] + ['参数\cc.ini']
[322] PUSHTYPE 19(U8) // 6
[327] PUSHTYPE 9(String) // 7
[332] ASSIGN Base[7], Base[4]
[343] PUSHVAR Base[6] // 8
[349] CALL 22
[354] POP // 7
[355] POP // 6
[356] SETFLAG NOT Base[6]
[363] POP // 5
[364] FLAGGOTO currpos + 542 [911]
[369] ASSIGN Base[1], [0]
[384] PUSHTYPE 10(U32) // 6
[389] ASSIGN Base[6], [26]
[404] PUSHVAR Base[5] // 7
[410] CALL 36
[415] POP // 6
[416] POP // 5
[417] PUSHTYPE 11(S32) // 6
[422] PUSHTYPE 9(String) // 7
[427] ASSIGN Base[7], ['54759']
[447] PUSHTYPE 26(Class) // 8
[452] ASSIGN Base[8], Base[5]
[463] PUSHVAR Base[6] // 9
[469] CALL 37
[474] POP // 8
[475] POP // 7
[476] POP // 6
[477] POP // 5
[478] PUSHTYPE 11(S32) // 6
[483] PUSHTYPE 9(String) // 7
[488] ASSIGN Base[7], ['234']
[506] PUSHTYPE 26(Class) // 8
[511] ASSIGN Base[8], Base[5]
[522] PUSHVAR Base[6] // 9
[528] CALL 37
[533] POP // 8
[534] POP // 7
[535] POP // 6
[536] POP // 5
[537] PUSHTYPE 11(S32) // 6
[542] PUSHTYPE 9(String) // 7
[547] ASSIGN Base[7], ['WizardMode']
[572] PUSHTYPE 26(Class) // 8
[577] ASSIGN Base[8], Base[5]
[588] PUSHVAR Base[6] // 9
[594] CALL 37
[599] POP // 8
[600] POP // 7
[601] POP // 6
[602] POP // 5
[603] PUSHTYPE 11(S32) // 6
[608] PUSHTYPE 9(String) // 7
[613] ASSIGN Base[7], ['AutoInstall0']
[640] PUSHTYPE 26(Class) // 8
[645] ASSIGN Base[8], Base[5]
[656] PUSHVAR Base[6] // 9
[662] CALL 37
[667] POP // 8
[668] POP // 7
[669] POP // 6
[670] POP // 5
[671] PUSHTYPE 11(S32) // 6
[676] PUSHTYPE 9(String) // 7
[681] ASSIGN Base[7], ['WizardForm=']
[707] PUSHTYPE 9(String) // 8
[712] PUSHTYPE 11(S32) // 9
[717] PUSHTYPE 22(Class) // 10
[722] ASSIGN Base[10], GlobalVar[1]
[733] PUSHVAR Base[9] // 11
[739] CALL 38
[744] POP // 10
[745] POP // 9
[746] PUSHVAR Base[8] // 10
[752] CALL 33
[757] POP // 9
[758] POP // 8
[759] CALC Base[7] + Base[8]
[771] POP // 7
[772] PUSHTYPE 26(Class) // 8
[777] ASSIGN Base[8], Base[5]
[788] PUSHVAR Base[6] // 9
[794] CALL 37
[799] POP // 8
[800] POP // 7
[801] POP // 6
[802] POP // 5
[803] PUSHTYPE 9(String) // 6
[808] ASSIGN Base[6], Base[4]
[819] PUSHVAR Base[2] // 7
[825] CALL 39
[830] POP // 6
[831] POP // 5
[832] PUSHTYPE 0(Pointer) // 6
[837] SETPOINTER Base[6]: Base[2]
[848] CALL 40
[853] POP // 5
[854] PUSHTYPE 19(U8) // 6
[859] ASSIGN Base[6], [0]
[871] PUSHTYPE 9(String) // 7
[876] ASSIGN Base[7], Base[2]
[887] PUSHTYPE 26(Class) // 8
[892] ASSIGN Base[8], Base[5]
[903] CALL 41
[908] POP // 7
[909] POP // 6
[910] POP // 5
[911] POPEXCEPTION 0
[913] PUSHTYPE 19(U8) // 6
[918] ASSIGN Base[6], [1]
[930] PUSHTYPE 22(Class) // 7
[935] ASSIGN Base[7], GlobalVar[1]
[946] CALL 35
[951] POP // 6
[952] POP // 5
[953] POPEXCEPTION 1
[955] RET
Proc [35]: External Decl: class:TCONTROL|ENABLED@|\01\00\00\00
Proc [36]: External Decl: class:TOBJECT|CREATE|\00\01
Proc [37]: External Decl: class:TSTRINGS|ADD|\00\01\00
Proc [38]: External Decl: class:TWINCONTROL|HANDLE|\01\00\00\00
Proc [39]: External Decl: \01\00 EXTRACTFILEPATH
Proc [40]: External Decl: \00\01 ADDPATHSPR
Proc [41]: External Decl: \00\00\00\00 INSTALLTASK
我分析他的code段有个判断的过程,如果窗体名字是"软件安装"那么就可以如果不是就显示出错信息。于是我自己写了个程序调用setup.exe进行安装,没想到还是不行,不知道是否还做了其他的判断?
请高手给予答疑,不胜感谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!