Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Well, once the bug is identified, yes. I wonder how do you find a bug like that, I guess you keep reading the disassembly of the trapping code until you find the problem. I don't think he could have used QEMU or some other form of debugging.


He does mention a bit more in a hidden comment:

"NTOSKRNL.EXE + debug symbols + IDA helped me understand how the remote break-in is supposed to work. I knew that something in the remote break-in code path before the first debug packet is sent is going to reboot my machine. So I patched "JMP SHORT $" instructions into the relevant code-path. If I placed it before the crash point, the machine hangs. If I placed it after the crash point, the machine reboots. This allowed me to "bisect" where the crash is happening."

-----

Here is a Chat-GPT breakdown of the comment:

NTOSKRNL.EXE: This is the kernel of the Windows NT operating system. When people refer to the "Windows kernel," they're typically talking about this executable.

debug symbols: These are additional pieces of data that describe the internal structures and functions within a binary (like an EXE or DLL). They make it much easier to understand what's going on when analyzing or debugging the binary.

IDA: IDA (Interactive DisAssembler) is a popular disassembler and debugger used by security researchers and reverse engineers to analyze binaries.

how the remote break-in is supposed to work: It sounds like the commenter is trying to understand how a specific feature or vulnerability related to remote debugging (or "remote break-in") operates.

something in the remote break-in code path before the first debug packet is sent: There's a sequence of events or a code path in the kernel related to the remote debugging feature. The problem seems to manifest before the first debug packet is sent over the network.

JMP SHORT $: This is an assembly instruction. The JMP instruction is used to jump to another part of the code. SHORT refers to a short jump, meaning the jump target is relatively close. The $ symbol refers to the current address of the instruction, so "JMP SHORT $" will cause the program to jump to itself, effectively causing an infinite loop.

patched "JMP SHORT $" instructions into the relevant code-path: By inserting this instruction at various points in the code, the commenter created intentional hangs in the system. This helped isolate where the crash occurs.

bisect: This term comes from the world of debugging and means to divide the code into smaller parts to determine where a problem is. In this context, the commenter is using the hang (from the JMP instruction) as an indicator. If they inserted the JMP instruction and the system hangs, it means the crash hasn't occurred yet. If they inserted the JMP instruction and the system reboots, it means the crash already happened. By moving the JMP instruction around, they can get closer to the exact point of the crash.

In essence, the commenter used a mix of reverse engineering tools and clever debugging tricks to narrow down where a crash was occurring in the Windows NT 3.1 kernel when using a remote debugging feature.


Not sure why this is downvoted, the comment is on point. Is it because it is partly gpt-generated content?

I wonder if patching memory worked in the debugger, if not this would have to be done by manually editing the kernel file with IDA or something, and rebooting the machine. But in either case this is a good way to find the problem.


That’s likely. ChatGPT is not reliable, dumping its explanation of an issue isn’t valuable. It’s noise.

Everything in the comment before that was great, no reason vote it down for that.


If you don't want to be seeing ChatGPT generated content here, you should downvote it to discourage the poster from doing so. This is a perfect use of a downvote IMHO.

If you don't mind or care enough, obviously don't downvote, and if you love it, upvote it. That's how we get our community to develop some shared standards of communication.

FWIW, if someone wants ChatGPT content, they can just go to ChatGPT too.


True, although in this case the ChatGPT explanation seems to be mostly accurate.

The one dubious point is the definition of "bisect". The definition is completely accurate in this context. But the sentence after the definition starts with "In this context,", implying that the definition itself should be relatively context-independent. Yet the term "bisect" in programming is more commonly used to refer to something slightly different: dividing some code's commit history into parts, not the code itself.

Also, several of the explanations are wordy and uninsightful, though not false.

…Admittedly, this is all beside the point. ChatGPT output carries a high risk of being inaccurate, so even if it's accurate in some specific case, readers have no way of knowing that. Which means that you shouldn't post ChatGPT output unless you can personally vouch for its accuracy, but in that case why use ChatGPT at all? Still, in this case I'll retrospectively vouch for it.


I added the ChatGPT explanation after the fact because I thought some readers might not have the background to understand the original explanation and I could vouch for its accuracy.

Honestly didn't expect it to cause such a backlash in this forum...


It must have been editing the file on disk. The debugger was what was causing the crash in the first place.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: