首页
论坛
专栏
课程

[调试逆向] [.NET平台] [原创]解决Anaconda3安装了python但MySQL检测不到的问题

2019-7-1 17:54 691

[调试逆向] [.NET平台] [原创]解决Anaconda3安装了python但MySQL检测不到的问题

2019-7-1 17:54
691
解决Anaconda3安装了python但MySQL检测不到的问题
AbsNew/2019.7.1

问题:使用Anaconda3 (32-bit)安装了python3,安装32位版MySQL时提示未检测到python。32位win7系统。
解决过程:很久没调试程序了,所以还是用以前惯用的OD开路。

OD附加到安装进程:ShowWindow下断点,点Check按钮:

1)
06E790F9    8BEC            MOV EBP,ESP
06E790FB    57              PUSH EDI
06E790FC    56              PUSH ESI
06E790FD    53              PUSH EBX
06E790FE    83EC 44         SUB ESP,44
06E79101    8BF1            MOV ESI,ECX
06E79103    8D7D B0         LEA EDI,DWORD PTR SS:[EBP-50]
06E79106    B9 10000000     MOV ECX,10
06E7910B    33C0            XOR EAX,EAX
06E7910D    F3:AB           REP STOS DWORD PTR ES:[EDI]
06E7910F    8BCE            MOV ECX,ESI
06E79111    894D B4         MOV DWORD PTR SS:[EBP-4C],ECX
06E79114    8BFA            MOV EDI,EDX
06E79116    B9 6C263C00     MOV ECX,3C266C
06E7911B    E8 68B0E84B     CALL clr.52D04188
06E79120    8BF0            MOV ESI,EAX
06E79122    8BCE            MOV ECX,ESI
06E79124    8BD7            MOV EDX,EDI
06E79126    E8 59C646FE     CALL 052E5784
06E7912B    8975 B0         MOV DWORD PTR SS:[EBP-50],ESI
06E7912E    8BCE            MOV ECX,ESI
06E79130    E8 0F6D61FD     CALL System_W.0448FE44
06E79135    8945 CC         MOV DWORD PTR SS:[EBP-34],EAX ==从ShowWindow返回

到上一级函数:

06E78F4B    57              PUSH EDI
06E78F4C    56              PUSH ESI
06E78F4D    53              PUSH EBX
06E78F4E    83EC 08         SUB ESP,8
06E78F51    894D F0         MOV DWORD PTR SS:[EBP-10],ECX
06E78F54    8BFA            MOV EDI,EDX
06E78F56    FF15 D4663C00   CALL DWORD PTR DS:[3C66D4]
06E78F5C    8BD8            MOV EBX,EAX
06E78F5E    85DB            TEST EBX,EBX
06E78F60    0F84 9A000000   JE 06E79000   ==改为跳,弹出出错信息,见后面,有很多有用的信息
06E78F66    8BCB            MOV ECX,EBX
06E78F68    8B01            MOV EAX,DWORD PTR DS:[ECX]
06E78F6A    8B40 48         MOV EAX,DWORD PTR DS:[EAX+48]
06E78F6D    FF10            CALL DWORD PTR DS:[EAX]
06E78F6F    85C0            TEST EAX,EAX
06E78F71    74 7A           JE SHORT 06E78FED    ==跳至显示未检测到phthon的提示框,修改不跳仍然显示提示框
06E78F73    B9 742E3C00     MOV ECX,3C2E74
06E78F78    E8 57913BF9     CALL 002320D4
06E78F7D    8BF0            MOV ESI,EAX
06E78F7F    8D56 04         LEA EDX,DWORD PTR DS:[ESI+4]
06E78F82    E8 398DE54B     CALL clr.52CD1CC0
06E78F87    C746 0C DC078E0>MOV DWORD PTR DS:[ESI+C],38E07DC
06E78F8E    B8 60572E05     MOV EAX,52E5760
06E78F93    8946 10         MOV DWORD PTR DS:[ESI+10],EAX
06E78F96    B9 EE3D5079     MOV ECX,79503DEE
06E78F9B    BA 01000000     MOV EDX,1
06E78FA0    E8 17923BF9     CALL 002321BC
06E78FA5    8945 EC         MOV DWORD PTR SS:[EBP-14],EAX
06E78FA8    57              PUSH EDI
06E78FA9    8BC8            MOV ECX,EAX
06E78FAB    33D2            XOR EDX,EDX
06E78FAD    E8 0A9BE54B     CALL clr.52CD2ABC
06E78FB2    FF75 EC         PUSH DWORD PTR SS:[EBP-14]
06E78FB5    8BCB            MOV ECX,EBX
06E78FB7    8BD6            MOV EDX,ESI
06E78FB9    8B01            MOV EAX,DWORD PTR DS:[ECX]
06E78FBB    8B40 5C         MOV EAX,DWORD PTR DS:[EAX+5C]
06E78FBE    FF50 04         CALL DWORD PTR DS:[EAX+4]           ==显示提示框
06E78FC1    8BF0            MOV ESI,EAX
06E78FC3    813E D0293C00   CMP DWORD PTR DS:[ESI],3C29D0
06E78FC9    74 0C           JE SHORT 06E78FD7
06E78FCB    8BD6            MOV EDX,ESI
06E78FCD    B9 D0293C00     MOV ECX,3C29D0
06E78FD2    E8 18AEE84B     CALL clr.52D03DEF
06E78FD7    8B7D F0         MOV EDI,DWORD PTR SS:[EBP-10]
06E78FDA    83C6 04         ADD ESI,4
06E78FDD    E8 9683E54B     CALL clr.52CD1378
06E78FE2    A5              MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
06E78FE3    A5              MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
06E78FE4    A5              MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
06E78FE5    8D65 F4         LEA ESP,DWORD PTR SS:[EBP-C]
06E78FE8    5B              POP EBX
06E78FE9    5E              POP ESI
06E78FEA    5F              POP EDI
06E78FEB    5D              POP EBP
06E78FEC    C3              RETN
06E78FED    8B4D F0         MOV ECX,DWORD PTR SS:[EBP-10]
06E78FF0    8BD7            MOV EDX,EDI
06E78FF2    FF15 58243C00   CALL DWORD PTR DS:[3C2458]  ==调用1)函数,显示提示框


出错信息:

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.InvalidOperationException: Unable to find a parent form to attach the dialog to.
   at MySql.Utility.Forms.InfoDialog.ShowDialog(InfoDialogProperties properties)         ==刚才的代码是在ShowDialog里面
   at MySql.Installer.Wizards.Common.CheckRequirementsPage.CheckRequirementButtonCheckClick(Object sender, EventArgs e)     ==应该要找这个代码
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

安装程序是dotNet的,马上逛逛看雪论坛,发现dnSpy这个神器,下载用来调试,附加到进程,点一下check按钮后调试界面左边出现一堆内容。
在System.Windows.Forms里Button的OnClick下断点
// Token: 0x0600119F RID: 4511 RVA: 0x00031F60 File Offset: 0x00030160
protected override void OnClick(EventArgs e)
{
Form form = base.FindFormInternal();
if (form != null)
{
form.DialogResult = this.dialogResult;
}
base.AccessibilityNotifyClients(AccessibleEvents.StateChange, -1);
base.AccessibilityNotifyClients(AccessibleEvents.NameChange, -1);
base.OnClick(e);
}
再点Check停下,这个是Button类的OnClick,没多大作用,查了一下资料,在Control的OnClick会调用用户的代码,于是去下断点:
// System.Windows.Forms.Control
// Token: 0x060007EF RID: 2031 RVA: 0x0000D794 File Offset: 0x0000B994
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected virtual void OnClick(EventArgs e)
{
EventHandler eventHandler = (EventHandler)base.Events[Control.EventClick];
if (eventHandler != null)
{
eventHandler(this, e);
}
}
这里会调用用户写的OnClick代码,在eventHandler跟进去:
// Token: 0x06000242 RID: 578 RVA: 0x0000D64C File Offset: 0x0000B84C
private void CheckRequirementButtonCheckClick(object sender, EventArgs e)
{
RequirementEntry requirementEntry = this.RequirementsListView.SelectedItems[0].Tag as RequirementEntry;
if (requirementEntry == null)
{
return;
}
bool isMet = requirementEntry.IsMet;
this.ShowManualInfo(requirementEntry);
if (!isMet)
{
InfoDialog.ShowDialog(InfoDialogProperties.GetInformationDialogProperties("Information", Resources.RequirementStillFailing, null, null));
}
}
就去到Check按钮的具体代码了。
找到关键代码:
private void CheckView(RegistryView view)
{
using (RegistryKey registryKey = RegistryKey.OpenBaseKey(this.Root, view).OpenSubKey(this.Key))
{
base.IsMet = (registryKey != null);
if (registryKey != null)
{
registryKey.Close();
}
}
}
跟踪一下找到检测的注册表位置:
LocalMachine\SOFTWARE\Python\PythonCore\3.7-32\InstallPath
看看注册表,原来已经有个一3.7项,里面也有InstallPath,新建3.7-32项,再新建InstallPath项,默认值设为实际安装路径(复制3.7项下面InstallPath的值即可),问题解决。


[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (1)
qqsunqiang 2019-7-1 19:42
2
0
谢谢楼主
游客
登录 | 注册 方可回帖
返回