There are 2 quick solutions:
1) Allow people to keep their H1-B after quitting their job. Looking for a job while you're on an H1-B sucks, you have to deceive your employer until the transfer goes through. And the transfer itself is a barrier to getting hired because you can't start immediately.
2) Prioritize applications within each occupation class by wage instead of lottery. That way these low wage body shops can't spam the system, they'd actually have to pay a good wage rather than the "prevailing wage" to get a visa approved.